From 7e3256415ac21ec920ccce14d4ca069083916432 Mon Sep 17 00:00:00 2001 From: "Efrain (Helgen)" Date: Tue, 20 Oct 2026 17:53:17 -0600 Subject: [PATCH] =?UTF-8?q?Cobranza:=20privado=5F()=20usa=20Permission.VIE?= =?UTF-8?q?W=20(NONE=20no=20est=C3=A1=20soportado=20y=20da=20Access=20deni?= =?UTF-8?q?ed)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit prepararCobranza() falló en la API real con "Access denied: DriveApp." en setSharing. Con Access.PRIVATE el permiso se ignora. El simulacro ahora rechaza NONE como Google. Co-Authored-By: Claude Opus 5.5 --- Code.js | 3 ++- tests/cobranza.test.js | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Code.js b/Code.js index 9d62bd9..605bbf9 100644 --- a/Code.js +++ b/Code.js @@ -1054,7 +1054,8 @@ function exigirCobranza_() { * las personas agregadas una por una (tania@, leo@). Workspace comparte con todo helgen.tech lo que se crea (§6.11). */ function privado_(item) { - if (item.getSharingAccess() !== DriveApp.Access.PRIVATE) item.setSharing(DriveApp.Access.PRIVATE, DriveApp.Permission.NONE); + // Permission.NONE no está soportado (da "Access denied: DriveApp"); con PRIVATE el permiso se ignora. + if (item.getSharingAccess() !== DriveApp.Access.PRIVATE) item.setSharing(DriveApp.Access.PRIVATE, DriveApp.Permission.VIEW); return item; } diff --git a/tests/cobranza.test.js b/tests/cobranza.test.js index aec170d..49e664e 100644 --- a/tests/cobranza.test.js +++ b/tests/cobranza.test.js @@ -35,7 +35,7 @@ function libro(id,nombre,pestanas){const L={id,nombre,pest:pestanas||{},getId:() // ---- Drive simulado ---- let nId=0; const carpetas={}, archivos={}; // Como Workspace de helgen.tech: todo lo nuevo nace compartido con el dominio (acceso 'DOMAIN') -const compartible=o=>Object.assign(o,{acceso:'DOMAIN',getSharingAccess:()=>o.acceso,setSharing:(a,p)=>{o.acceso=a;o.permiso=p}}); +const compartible=o=>Object.assign(o,{acceso:'DOMAIN',getSharingAccess:()=>o.acceso,setSharing:(a,p)=>{if(p==='NONE')throw new Error('Access denied: DriveApp.');o.acceso=a;o.permiso=p}}); // NONE no está soportado en Apps Script function carpeta(nombre,padre){const f=compartible({id:'F'+(++nId),nombre,padre,hijos:[],archivos:[],trashed:false}); Object.assign(f,{ getId:()=>f.id,getName:()=>f.nombre,getUrl:()=>'https://drive/'+f.id,isTrashed:()=>f.trashed, getFoldersByName:n=>{const l=f.hijos.filter(h=>h.nombre===n);let i=0;return{hasNext:()=>il[i++]}},