From 5efcdfcce2cbac8ff8d5662c1409b77b5c5de230 Mon Sep 17 00:00:00 2001 From: Evan Hahn Date: Tue, 5 Nov 2024 11:19:40 -0600 Subject: [PATCH] test: syncing blob variants (#954) --- package-lock.json | 16 +++++++ package.json | 1 + test-e2e/sync.js | 42 +++++++++++------- .../images/02-digidem-logo-preview.jpg | Bin 0 -> 1259 bytes .../fixtures/images/02-digidem-logo-thumb.jpg | Bin 0 -> 494 bytes 5 files changed, 44 insertions(+), 15 deletions(-) create mode 100644 test/fixtures/images/02-digidem-logo-preview.jpg create mode 100644 test/fixtures/images/02-digidem-logo-thumb.jpg diff --git a/package-lock.json b/package-lock.json index 4cb726cdd..f03f80113 100644 --- a/package-lock.json +++ b/package-lock.json @@ -95,6 +95,7 @@ "math-random-seed": "^2.0.0", "nanobench": "^3.0.0", "npm-run-all": "^4.1.5", + "p-props": "^6.0.0", "prettier": "^2.8.8", "random-access-file": "^4.0.7", "random-access-memory": "^6.2.1", @@ -7321,6 +7322,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/p-props": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-props/-/p-props-6.0.0.tgz", + "integrity": "sha512-vk89p9/3y/53LtD99tg1Ld2deVb4BXzw3Ekl1/0unNTvHAqbmgrf+T7eLDXv0mkVXl0mc/wmJoeO00IK7UwF7A==", + "dev": true, + "dependencies": { + "p-map": "^6.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/p-timeout": { "version": "6.1.2", "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.2.tgz", diff --git a/package.json b/package.json index eb3d7947c..02b3a3976 100644 --- a/package.json +++ b/package.json @@ -142,6 +142,7 @@ "math-random-seed": "^2.0.0", "nanobench": "^3.0.0", "npm-run-all": "^4.1.5", + "p-props": "^6.0.0", "prettier": "^2.8.8", "random-access-file": "^4.0.7", "random-access-memory": "^6.2.1", diff --git a/test-e2e/sync.js b/test-e2e/sync.js index 321916b68..95fb1a43b 100644 --- a/test-e2e/sync.js +++ b/test-e2e/sync.js @@ -3,6 +3,7 @@ import assert from 'node:assert/strict' import * as fs from 'node:fs/promises' import { isDeepStrictEqual } from 'node:util' import { pEvent } from 'p-event' +import pProps from 'p-props' import { setTimeout as delay } from 'timers/promises' import { request } from 'undici' import FakeTimers from '@sinonjs/fake-timers' @@ -28,6 +29,7 @@ import { BLOCKED_ROLE_ID, COORDINATOR_ROLE_ID } from '../src/roles.js' import { kSyncState } from '../src/sync/sync-api.js' import { blobMetadata } from '../test/helpers/blob-store.js' /** @import { State } from '../src/sync/sync-api.js' */ +/** @import { BlobId } from '../src/types.js' */ const SCHEMAS_INITIAL_SYNC = ['preset', 'field'] @@ -137,13 +139,15 @@ test('syncing blobs', async (t) => { ]) const [invitorProject, inviteeProject] = projects - const fixturePath = new URL( - '../test/fixtures/images/02-digidem-logo.jpg', - import.meta.url - ).pathname + const fixturesPath = new URL('../test/fixtures/images/', import.meta.url) + const fixturePaths = { + original: new URL('02-digidem-logo.jpg', fixturesPath).pathname, + preview: new URL('02-digidem-logo-preview.jpg', fixturesPath).pathname, + thumbnail: new URL('02-digidem-logo-thumb.jpg', fixturesPath).pathname, + } const blob = await invitorProject.$blobs.create( - { original: fixturePath }, + fixturePaths, blobMetadata({ mimeType: 'image/jpeg' }) ) @@ -155,17 +159,25 @@ test('syncing blobs', async (t) => { await waitForSync(projects, 'full') - const blobUrl = await inviteeProject.$blobs.getUrl({ - ...blob, - variant: 'original', + await pProps(fixturePaths, async (path, variant) => { + const expectedBytesPromise = fs.readFile(path) + + // We have to tell TypeScript that the blob's type is "photo", which it + // isn't smart enough to figure out. + assert.equal(blob.type, 'photo', 'blob should be a photo type') + const blobUrl = await inviteeProject.$blobs.getUrl({ + ...blob, + type: 'photo', + variant, + }) + const response = await request(blobUrl, { reset: true }) + assert.equal(response.statusCode, 200) + assert.deepEqual( + Buffer.from(await response.body.arrayBuffer()), + await expectedBytesPromise, + 'blob makes it to the other side' + ) }) - const response = await request(blobUrl, { reset: true }) - assert.equal(response.statusCode, 200) - assert.deepEqual( - Buffer.from(await response.body.arrayBuffer()), - await fs.readFile(fixturePath), - 'blob makes it to the other side' - ) }) test('start and stop sync', async function (t) { diff --git a/test/fixtures/images/02-digidem-logo-preview.jpg b/test/fixtures/images/02-digidem-logo-preview.jpg new file mode 100644 index 0000000000000000000000000000000000000000..732124a852379c555b66b07e8654cd77be0d2372 GIT binary patch literal 1259 zcmex=;(m>HRXVjut)1%@RPGYjkgTMRtRj0{Wy%mP5EGyN_g1x(IM`X(qZ;dsep{rdS_ z2JUF7yZRT8igW+`vo5>$dDOzEt4_ZQD|&nS=z6)0HC4K52QSykq&<(WJoRi=UDV8L z{in`tk@dO0{lb=YvWwrXe0p`!nkcQKVB+}EAf2hJe#q&<-2rm6o&WjIm?-K}G-)Hy#T-C?FxoTxoxgnY#8{g-T`!+J3HMi5 z+Er;Odimsub@TjOOFk88PFXEb?|DPm`O?P}O{wU9s|yK}rlp4Ut_k@5O(HFqVO`7V z8x{YuJZ@=9nY~+fl}F!Zk;;Z7&U+mjm7Cl@2G?HutNUg9gDV?sHa$=cYE1T@sJ3L1 zc=wgK2MgzFh#8#-eQfaJ55tn#uD0q=7&Oz@OrDdy`NXu4TF1S5a#51A|S(6#$Bdhqw=YBOkKSUv!zlFyKpoZI__8_ zSvmEiRABdpXr(lhgkD37%OYN>f=r$9cb5bol&ShCkQ?z~Lx;hkBgeKEpO&xn)XjDO z&yehOX7*~)KSJ8ZOnzzi_dT!TdvvYr_O|C)e6MTPJ^K6RNI+U}X&U4-5p>5QIk%1i>^G79wd9)Fwm)TVo~Gf&rTpet2kRJ9#QcDJxwFG^&#+ABg%8|Tb+d{Hh>Gwgkz;P8g5E{uRYgiH zlB!FrQf66I)~?PP>m%1`vCY2vx3)N@%@Iv?Tl;%DoU1z8^~tzX_a$M#KoV(4MV(1z z8vegO5FYS3Vqz;P#*6h59$C^g>59fqBvX@5m?*rGSiv~!H2dUlY6>qn#7x^iu)(^S zeA+y`R3xXfWrNeo=kx7*w;QjVUF|7X@R)H*2iW}1^$;+kz{Saz#%4VeDg41OWPd`t G;pH1~zE>## literal 0 HcmV?d00001