feat(media): implement integrated media manager with sidebar and picker

- Implement DriveService and ShopifyMediaService for backend operations
- Create MediaSidebar.html with premium UI and auto-polling
- Integrate Google Picker API for robust file selection
- Orchestrate sync logic via MediaService (Drive -> Staged Upload -> Shopify)
- Add secure config handling for API keys and tokens
- Update ppsscript.json with required OAuth scopes
- Update MEMORY.md and README.md with architecture details
This commit is contained in:
Ben Miller
2025-12-25 15:10:17 -07:00
parent 2417359595
commit 95094b1674
21 changed files with 973 additions and 16 deletions

View File

@ -0,0 +1,30 @@
import { MockDriveService } from "./MockDriveService"
describe("DriveService", () => {
let service: MockDriveService
beforeEach(() => {
service = new MockDriveService()
})
test("getOrCreateFolder creates new folder if not exists", () => {
const folder = service.getOrCreateFolder("TestSKU", "root_id")
expect(folder.getName()).toBe("TestSKU")
expect(folder.getId()).toContain("TestSKU")
})
test("saveFile stores file in correct folder", () => {
const folder = service.getOrCreateFolder("TestSKU", "root_id")
const mockBlob = {
getName: () => "test.jpg",
getContentType: () => "image/jpeg"
} as unknown as GoogleAppsScript.Base.Blob
const file = service.saveFile(mockBlob, folder.getId())
expect(file.getName()).toBe("test.jpg")
const files = service.getFiles(folder.getId())
expect(files.length).toBe(1)
expect(files[0].getId()).toBe(file.getId())
})
})