mirror of
https://github.com/efrainsosa27/cotizador-helgen.git
synced 2026-10-24 05:16:48 +00:00
Pruebas: asignarClavesProyectos (vista previa, aplicar, carpeta renombrada a mano)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
d56dd38e02
commit
a971f2b8b6
@ -17,7 +17,7 @@ function hoja(m){return{m,getLastRow:()=>m.length,getMaxRows:()=>1000,setFrozenR
|
|||||||
// Drive simulado: árbol de carpetas con Papelera
|
// Drive simulado: árbol de carpetas con Papelera
|
||||||
let nId=0; const carpetas={};
|
let nId=0; const carpetas={};
|
||||||
function carpeta(nombre,padre){const f={id:'F'+(++nId),nombre,padre,hijos:[],archivos:[],trashed:false,
|
function carpeta(nombre,padre){const f={id:'F'+(++nId),nombre,padre,hijos:[],archivos:[],trashed:false,
|
||||||
getId:()=>f.id,getName:()=>f.nombre,getUrl:()=>'https://drive/'+f.id,isTrashed:()=>f.trashed,
|
getId:()=>f.id,getName:()=>f.nombre,setName:n=>{f.nombre=n;return f},getUrl:()=>'https://drive/'+f.id,isTrashed:()=>f.trashed,
|
||||||
getFoldersByName:n=>{const l=f.hijos.filter(h=>h.nombre===n);let i=0;return{hasNext:()=>i<l.length,next:()=>l[i++]}},
|
getFoldersByName:n=>{const l=f.hijos.filter(h=>h.nombre===n);let i=0;return{hasNext:()=>i<l.length,next:()=>l[i++]}},
|
||||||
createFolder:n=>{const h=carpeta(n,f);f.hijos.push(h);return h},
|
createFolder:n=>{const h=carpeta(n,f);f.hijos.push(h);return h},
|
||||||
createFile:b=>{f.archivos.push(b);return{getUrl:()=>'https://drive/pdf/'+b.name}}};
|
createFile:b=>{f.archivos.push(b);return{getUrl:()=>'https://drive/pdf/'+b.name}}};
|
||||||
@ -36,7 +36,8 @@ const db={getSheetByName:n=>n==='Config'?cfg:n==='Cotizaciones'?cot:n==='Proyect
|
|||||||
insertSheet:n=>{if(pry)throw new Error('ya existe');return pry=hoja([])},getId:()=>'DB'};
|
insertSheet:n=>{if(pry)throw new Error('ya existe');return pry=hoja([])},getId:()=>'DB'};
|
||||||
const props={SPREADSHEET_ID:'DB',FOLDER_ID:pdfRaiz.id,CATALOGO_ID:'CAT'},cache={};
|
const props={SPREADSHEET_ID:'DB',FOLDER_ID:pdfRaiz.id,CATALOGO_ID:'CAT'},cache={};
|
||||||
const dv=()=>{const b={requireValueInList:(l)=>{b.lista=l;return b},setAllowInvalid:()=>b,setHelpText:()=>b,build:()=>({})};return b};
|
const dv=()=>{const b={requireValueInList:(l)=>{b.lista=l;return b},setAllowInvalid:()=>b,setHelpText:()=>b,build:()=>({})};return b};
|
||||||
const ctx={console:{...console,warn(){}},Date,JSON,
|
const registro=[];
|
||||||
|
const ctx={console:{...console,warn(){}},Date,JSON,Logger:{log:m=>registro.push(String(m))},
|
||||||
PropertiesService:{getScriptProperties:()=>({getProperty:k=>props[k]??null,setProperty:(k,v)=>props[k]=v,getProperties:()=>Object.assign({},props),setProperties:o=>Object.assign(props,o)})},
|
PropertiesService:{getScriptProperties:()=>({getProperty:k=>props[k]??null,setProperty:(k,v)=>props[k]=v,getProperties:()=>Object.assign({},props),setProperties:o=>Object.assign(props,o)})},
|
||||||
CacheService:{getScriptCache:()=>({get:k=>cache[k]??null,put:(k,v)=>cache[k]=v,getAll:ks=>Object.fromEntries(ks.filter(k=>k in cache).map(k=>[k,cache[k]])),putAll:o=>Object.assign(cache,o)})},
|
CacheService:{getScriptCache:()=>({get:k=>cache[k]??null,put:(k,v)=>cache[k]=v,getAll:ks=>Object.fromEntries(ks.filter(k=>k in cache).map(k=>[k,cache[k]])),putAll:o=>Object.assign(cache,o)})},
|
||||||
LockService:{getScriptLock:()=>({tryLock:()=>true,releaseLock(){}})},
|
LockService:{getScriptLock:()=>({tryLock:()=>true,releaseLock(){}})},
|
||||||
@ -146,6 +147,24 @@ const c1b=carpetas[pry.m[1][7]];
|
|||||||
assert(c1b!==c1&&!c1b.trashed&&c1b.hijos.find(h=>h.nombre==='Cotizaciones').archivos.length===1);
|
assert(c1b!==c1&&!c1b.trashed&&c1b.hijos.find(h=>h.nombre==='Cotizaciones').archivos.length===1);
|
||||||
assert.deepEqual(c1b.hijos.map(h=>h.nombre),['Cotizaciones']);
|
assert.deepEqual(c1b.hijos.map(h=>h.nombre),['Cotizaciones']);
|
||||||
|
|
||||||
|
// --- Claves para proyectos que ya existían (editor): vista previa y aplicar ---
|
||||||
|
const pr=pry.m;
|
||||||
|
const cv1=carpeta('PRY-2026-0101 — Helgen — DROGHEDA',pdfRaiz), cv2=carpeta('Nombre puesto a mano',pdfRaiz);
|
||||||
|
pr.push(['PRY-2026-0101','','DROGHEDA','Helgen','id','','Activo',cv1.id,'a@helgen.tech','A','B']);
|
||||||
|
pr.push(['PRY-2026-0102','','Planta de Agua Norte','Helgen','id','','Cerrado',cv2.id,'a@helgen.tech','A','B']);
|
||||||
|
pr.push(['PRY-2026-0103','','Sin carpeta','Helgen','id','','Cancelado','NO-EXISTE','a@helgen.tech','A','B']);
|
||||||
|
const clavePrevia=pr[1][11];
|
||||||
|
let prev=ctx.asignarClavesProyectos();
|
||||||
|
assert.deepEqual(prev.map(x=>x.folio+':'+x.clave),['PRY-2026-0101:DRO','PRY-2026-0102:PAN','PRY-2026-0103:SIC'],'solo los que no tienen clave');
|
||||||
|
assert.equal(cv1.nombre,'PRY-2026-0101 — Helgen — DROGHEDA','la vista previa no cambia nada'); assert.equal(pr[pr.length-3][11],undefined);
|
||||||
|
assert(registro.some(l=>/VISTA PREVIA/.test(l))&®istro.some(l=>/DROGHEDA" → PRY-2026-0101-DRO/.test(l)));
|
||||||
|
ctx.asignarClavesProyectosAplicar();
|
||||||
|
assert.deepEqual(pr.slice(-3).map(r=>r[11]),['DRO','PAN','SIC']);
|
||||||
|
assert.equal(cv1.nombre,'PRY-2026-0101-DRO — Helgen — DROGHEDA','carpeta renombrada (por carpeta_id)');
|
||||||
|
assert.equal(cv2.nombre,'Nombre puesto a mano','renombrada a mano: no se toca');
|
||||||
|
assert.equal(pr[1][11],clavePrevia,'la clave de un proyecto que ya tenía no cambia');
|
||||||
|
assert.deepEqual(ctx.asignarClavesProyectos(),[],'una segunda vez ya no hay nada que asignar');
|
||||||
|
|
||||||
// --- Fuera de doPost (sin vendedor) no se crean proyectos ---
|
// --- Fuera de doPost (sin vendedor) no se crean proyectos ---
|
||||||
vm.runInContext('VENDEDOR_ = null',ctx);
|
vm.runInContext('VENDEDOR_ = null',ctx);
|
||||||
assert.throws(()=>ctx.crearProyecto(nuevo({idSolicitud:'x'})),/Inicia sesión/);
|
assert.throws(()=>ctx.crearProyecto(nuevo({idSolicitud:'x'})),/Inicia sesión/);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user