test(i18n): retain import and conversion count evidence

This commit is contained in:
cesnimda
2026-11-11 15:11:21 +01:00
parent 44112c7cbb
commit 511b68a19d
21 changed files with 748 additions and 0 deletions
+11
View File
@@ -0,0 +1,11 @@
# Import and conversion count wording
Source/verifier44112c7c, baseline50e16ff2. Existing plural keys remain unchanged. New `importedJob` and `convertedRow` keys select the one-item form in EN/NB; zero/multiple values retain existing plural wording. Import payloads, partial-success reporting, Last import count, CSV parser and native download bytes are unchanged. These are two finite literal-key choices, not unbounded runtime translation keys.
PASSED:50 cases/six suites (import/export lifetime, Settings lifetime, picker activation, catalogue parity/placeholders and language provider). Four new language-table cases cover zero/one/two conversion and one/two import messages; earlier35/39 cases overlap. RED receipts retain the two conversion and two import language failures before the fix. Build/TypeScript and scoped ESLint passed.
PASSED:two paired actual-UI profiles (390/Bokmål/dark touch and1440/English/light mouse), each converting zero/one/two rows. Six native JSON downloads and six accessibility scans passed, with exact output row counts/Unicode and visible singular/plural messages. No API writes, page exceptions or unavailable fixture reads; fonts blocked. This is a finite copy-focused matrix, not the full export/session matrix. The earlier36-download package retains its original source identity. Mobile Bokmål singular feedback was visually inspected.
Evidence: `evidence/import-conversion-counts/`; source/evidence/export content bindings: `IMPORT_CONVERSION_COUNT_SOURCE_MANIFEST.json`. Native gzip receipts preserve downloaded bytes. No physical CV/PDF, API, dependency, schema or additional locale changed.
Rollback reverts44112c7c and reruns affected copy/catalogue checks. Full visible-text, native-language/European, physical-device, integrated security and final release acceptance remain open. Historical188 dynamic reviews remain historical; this report accounts for the two changed finite choices on the current source.
@@ -0,0 +1,126 @@
{
"sourceContentCommit": "44112c7cbb480f96e0c9ca7a5dbed35650aa3a53",
"policy": "LF-normalised source and text evidence; raw PNG/gzip/zip/export. Content binding for offline UI verification; release candidate/image identity remains separate.",
"sources": {
"job-tracker-ui/src/App.tsx": "e0c50ec92954b90cf62b9d8b8e0d5b5802c2408e577e5e255a8d78c3dfdf7135",
"job-tracker-ui/src/components/SettingsView.tsx": "250b80b2d18f82ab63e7341c0779380345f386acc0d89161064d8e41439636d2",
"job-tracker-ui/src/components/ImportExportJobs.tsx": "1f3a9ed936bccd35e69bf05449f3615af5b7e8f3bf1fb52b99b39a3ae6cb253b",
"job-tracker-ui/src/sessionBoundary.ts": "09edca77c98294818d2ad0c409ce595f1b6ca0c1f60419fc1078b70f96f5b7b9",
"job-tracker-ui/src/api.ts": "f75ac7be07a743396843ddad5fd3371e2d5fd3d9c5d933e09e26fae2159f2378",
"job-tracker-ui/src/i18n/I18nProvider.tsx": "dfa8d95510a7dd872e1b9bbddf9bb4ab31da4d4b5e932b0099397d11e08ad108",
"job-tracker-ui/src/i18n/translations.ts": "1bef579f8bb593ed3a888780e9d3472531f93b5602a6e92d9df8fa062060c1e9",
"job-tracker-ui/src/job-export-lifetime.test.tsx": "c49f392f8fb15ade6f87bd1515f124432a3768c9b9ff0b5a3e4fd71bdeefa06c",
"job-tracker-ui/src/job-import.test.tsx": "2baa932bb464490d12cddfafcbea2d19795725519f380d7db803369a71c0288d",
"job-tracker-ui/src/settings-import-lifetime.test.tsx": "24af2a5954533087ddbff40659ff9f8dcf70805435dca772314c2be7d8bf6133",
"job-tracker-ui/src/file-picker-activation.test.tsx": "accb87f94a7b36373eec6583a391a17ede7e7779cf18d81d4a86b43e0bd6afbe",
"job-tracker-ui/scripts/verify-job-export-lifetime.mjs": "bea2e5a04b7cad4f2af6b1dd2e19c505261ab171dcd686b6662332aa2b838646",
"job-tracker-ui/src/translation-catalogue.test.ts": "f20e8099f2c4dda76574ea3ed1e95b743eef5da82507d7cbc3f9925d52356b98",
"job-tracker-ui/src/i18n-provider.test.tsx": "520b8559ebd0c206649008c98705c24bd8caac7e00a642984a75b11f7d851fbe",
"job-tracker-ui/package.json": "3745394e406cefa40d30a87e840bccb359be147bac6ffba736e2ae90898a8626",
"job-tracker-ui/package-lock.json": "bf31e90d7af03e8af059db2aaf893925b9e8881a30a1688034ed88ef45d4fcab"
},
"evidence": {
"docs/i18n/evidence/import-conversion-counts/1440-en-light-converted-0.gz": "50c15d921df28492e2d9bf2da5d1cd5c78ee416bdcf478074db63d76d2381cba",
"docs/i18n/evidence/import-conversion-counts/1440-en-light-converted-1.gz": "2117b71f51b07c27587ff99d40acd9ef43b538a62658ce52ea060ab4a3c2cba5",
"docs/i18n/evidence/import-conversion-counts/1440-en-light-converted-2.gz": "7f3553fe748c77febb7f3b312d152002e44c1608e05e99b05b7865dac0154326",
"docs/i18n/evidence/import-conversion-counts/1440-en-light-count-0.png": "06b4cae9dcda200767c296e923ed5e8eac7bdb53721c1f55ffda9bb0b7c06d63",
"docs/i18n/evidence/import-conversion-counts/1440-en-light-count-1.png": "7c764a401d219d2bd5452bea3380067d396ca0ffc052b06bdd2bfa705c346aea",
"docs/i18n/evidence/import-conversion-counts/1440-en-light-count-2.png": "8b901708e2b8c8bea11765970539b0d28383e30a5243dc6ddd4c59ddb8a87135",
"docs/i18n/evidence/import-conversion-counts/390-nb-dark-converted-0.gz": "50c15d921df28492e2d9bf2da5d1cd5c78ee416bdcf478074db63d76d2381cba",
"docs/i18n/evidence/import-conversion-counts/390-nb-dark-converted-1.gz": "2117b71f51b07c27587ff99d40acd9ef43b538a62658ce52ea060ab4a3c2cba5",
"docs/i18n/evidence/import-conversion-counts/390-nb-dark-converted-2.gz": "7f3553fe748c77febb7f3b312d152002e44c1608e05e99b05b7865dac0154326",
"docs/i18n/evidence/import-conversion-counts/390-nb-dark-count-0.png": "05b956b3267ccc9e1c928aaa987241c2d4f9db9f058a5d5de0124d1dc261d10c",
"docs/i18n/evidence/import-conversion-counts/390-nb-dark-count-1.png": "cc3403c35dcb011bde0a68d2b713c65a237abc6bd6fb449b0bbdb7029b32b3fb",
"docs/i18n/evidence/import-conversion-counts/390-nb-dark-count-2.png": "9292a818d04ccd97f709d1b6289b4cafbdf781b09a3e8156ed9cf0304a288154",
"docs/i18n/evidence/import-conversion-counts/BROWSER.json": "b7e83a199c70ff58c93211a1d04da0630470927b3f4c22cf6cc8a4056b10d871",
"docs/i18n/evidence/import-conversion-counts/BROWSER.txt": "be89f2d03cc906ed953e6f6fb4f90a936b67633b7947d8d59a5c091a0ee8a649",
"docs/i18n/evidence/import-conversion-counts/BUILD.txt": "b5633b37143e111a2fd97dc5b7b0fc244c7587fc5c0c11c245f6c4c1f2e98dbc",
"docs/i18n/evidence/import-conversion-counts/LINT.txt": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"docs/i18n/evidence/import-conversion-counts/RED_CONVERSION.txt": "411b9f558921d6f85643511b433c82b9289b94c874ca267a192040a965f70170",
"docs/i18n/evidence/import-conversion-counts/RED_IMPORT.txt": "148548165d5b601ea43c765a07d7f61f2d7b1fb5264377672a0bdd6c8fe9a32b",
"docs/i18n/evidence/import-conversion-counts/TESTS.txt": "a1efa7de41b86d6d48b70c97da55e9ef0e9de9fcce4ca9d5036787bcc198b8d7",
"docs/i18n/IMPORT_CONVERSION_COUNTS.md": "a6fcfb1b918bfd0cd9ba235d27675a8829621265f83d96dc09b93c792bbfdcba"
},
"export": {
"job-tracker-ui/out/404.html": "1ca05af72181de6df1a2b0c07fe5d151fb058344c07e204a78648db4ec1c6e64",
"job-tracker-ui/out/__next.__PAGE__.txt": "838e2b173fe18664741187b814d92cb9006a97f70f2e61d866e88090dbe531c8",
"job-tracker-ui/out/__next._full.txt": "dae993f53affb686262f8ae8e75718ef05b43cdf4b9b7391376fe8ca4fe41ccf",
"job-tracker-ui/out/__next._tree.txt": "ce646215db5c8507b39e758174f959ab2416b6d8fbe67b5f4d14103db564fc13",
"job-tracker-ui/out/_next/static/chunks/0--vhwu1kmht5.js": "426fae50ff0485fb6af8e28a7d1751dfaefcb6118a24dab39b3a7099d38c18dd",
"job-tracker-ui/out/_next/static/chunks/0-_aq6ipzcshj.js": "39f90c215bf52aef6274ed3dcc0f8af32e21a37fe8845b3bca0d6ea60da6a8c2",
"job-tracker-ui/out/_next/static/chunks/05rgc5zsm9p5i.js": "1da7305ab9d8e95795327cce11a16db4c56d90429d7e1dea4c4088c085f20d69",
"job-tracker-ui/out/_next/static/chunks/0afg9bl7a8pj5.js": "bd0cec651950d5007f84273af5be8d8255806da4db54238f5c512442c7449459",
"job-tracker-ui/out/_next/static/chunks/0ah1fzqmie05a.js": "5c65505a7dcbac63ac71d254e619a4c800943bfb4fa16cd40c10cdbe7e9b6e31",
"job-tracker-ui/out/_next/static/chunks/0b3nrgli_w65x.js": "bf23e1a05a97de3a950e76eb206b2fbbe9003460891ecd5ab091155aa385badc",
"job-tracker-ui/out/_next/static/chunks/0bdt7ln111t48.js": "6184b1a61f22e2a640c17941634fdc75678ce93d142848d9f07f163e0d1fd201",
"job-tracker-ui/out/_next/static/chunks/0cz1d0mv5g_q7.js": "0973c1d64c88adc8e3c950410cb58b288f72118d5965b78049438deb8f2f9683",
"job-tracker-ui/out/_next/static/chunks/0og1crk78cn4a.js": "aa5031605cb2f46a612e94d9d71473f48a71aa4a5acfe8fe5f2dfc66d951ab40",
"job-tracker-ui/out/_next/static/chunks/0pvbhqkwp15b6.js": "f210cc1a8c203de6008b6137c0324afabb33f233c1ab56800fe9e6c963c0c34a",
"job-tracker-ui/out/_next/static/chunks/0q20g9o8x-k8z.js": "3d4d9086985419aa8866b032158196c774acb8bf318f3c8245508c8daa9c5148",
"job-tracker-ui/out/_next/static/chunks/0q_pwu9jxv4-d.js": "42a43b3d7245a413c7c29b4cbe87823037a6dbc637e2e282c92405470e0f575d",
"job-tracker-ui/out/_next/static/chunks/0qxm1h9uqfgpa.js": "a5af3192c76f3b8dac5c17afbe90d96a5c7652810ce69b7f39fbcf1f1231fd8c",
"job-tracker-ui/out/_next/static/chunks/0ta69108309yl.js": "07b8069d13ddaf7aaa24daf1070144a2e98b444ca162b628b8bfb8e1068d2967",
"job-tracker-ui/out/_next/static/chunks/0v1q0j141eyli.js": "8180d4c9dae8da28079152624739b603d6d63c62554015b1bf9a82cd5bbdc5fb",
"job-tracker-ui/out/_next/static/chunks/0vo4_3wcjs1gy.js": "5e4d305fc346f9ecf48328ab0416397d8bd7c100f0de99dea16d2a1463b386a9",
"job-tracker-ui/out/_next/static/chunks/0zep-wknuuxm3.js": "cc13d0dc908a4b047a165a50a226b787ee7707135b3f2c5894aab8cbd618a29c",
"job-tracker-ui/out/_next/static/chunks/1-8ykqf0n88k2.js": "eb208124ec838cb9a9ae366745bd81fba1c35eeceac128c567bbb7977ebb6a2e",
"job-tracker-ui/out/_next/static/chunks/10qxrc5f9nore.js": "512bfc44077703fa4e03e15ca48acf3501231c5e2cb9bf7beb2ec30224fe287b",
"job-tracker-ui/out/_next/static/chunks/1435in_k_-dhc.js": "4757476512d5c4dd25f9264a18b304ed4824b23aff1c09e134fcbff21d9c36b6",
"job-tracker-ui/out/_next/static/chunks/145oicobmjvm7.js": "d6bbbdeed1381652dc7412e5ce673a077579ecd5cee8934cb6b533c814098764",
"job-tracker-ui/out/_next/static/chunks/14e7ovj0s3elm.js": "070567dd4d23fb9fa0b9ba132185a697af6578045d43b2b1c7bbb2a1594d935d",
"job-tracker-ui/out/_next/static/chunks/15saa2mllmdp7.js": "6664972f61e1669d2ca1ed9af467df87d316efeadf59496ce8c68d8c84fd7512",
"job-tracker-ui/out/_next/static/chunks/16lfece6cnlln.js": "716363ba044f30b0e70440756b4e5eafa2d25f2e1628e855e3bc4ab9eabee3d3",
"job-tracker-ui/out/_next/static/chunks/188aj_hr_p4eq.js": "f10e4af24bebfb8b9e7306a5688ef45f07f280c920dc01815ac578fbe18e2182",
"job-tracker-ui/out/_next/static/chunks/1avt7t-z_q80r.js": "8cbd919d971eaf46e508f9e6b073a9183a29457c3c42c9566ec74b018894c061",
"job-tracker-ui/out/_next/static/chunks/1ke8pzecwofrg.css": "32e9ab963ebadebcbe2c68dffb24cfbfc8cc24255ad91b48b7941fc777bf7439",
"job-tracker-ui/out/_next/static/chunks/1pcns9f7sl8yk.js": "1a1b889438e68c64984964627315e806548b753c40c6c012c706ca03edc3dfe5",
"job-tracker-ui/out/_next/static/chunks/1req80b9jj38r.js": "eee4d2e3789e1215195dba99ad0f09d34f8c83da848322b76054722233e9dae3",
"job-tracker-ui/out/_next/static/chunks/1svx1qnrof8xa.js": "111c502a1ca939f7bf971ed1b3e3cda011b130c313a7f7df742ae4b1e14486ae",
"job-tracker-ui/out/_next/static/chunks/1w3q8yrcjn2jk.js": "365200e241ee9290e93d7c2fdba169f2b0a8e774541e3cbf3f6f2781110fa644",
"job-tracker-ui/out/_next/static/chunks/1xn023_28rgzj.js": "4f7f2108d030a48d039930736c92a55710975dddf419fe673f84d92899b1f575",
"job-tracker-ui/out/_next/static/chunks/1xwc-b795syag.css": "f73c002233f931ca14d0ae58815c47ca9f2659f25b1547a6d1fdca12a2a00b3f",
"job-tracker-ui/out/_next/static/chunks/22wx8--1b9tnq.js": "3f7d8e762371262c6a740b4dac21725b424847319afac46055e97074a99ff5f5",
"job-tracker-ui/out/_next/static/chunks/24_cq-0_-oa1r.js": "f81cb5ffd0dd4a953d0dc48610226123cc99d577371809ed8c73b901a7bb988c",
"job-tracker-ui/out/_next/static/chunks/274f8aifi_wup.js": "bc5bc5617b4acbbbb1c7966322c508bb5554024d78e71e523e27f7f5bba5a8ab",
"job-tracker-ui/out/_next/static/chunks/2edynwqicn6ym.js": "c694af15bb117955e6f7f0962f47495b2be017dfdea93b6d4ede4d5e4fcd7efd",
"job-tracker-ui/out/_next/static/chunks/2ha8nlh4rv92e.js": "5cb4b4cee708f35ed54ef6289269fa866afbaa64fd47bf9275ff691664d3132e",
"job-tracker-ui/out/_next/static/chunks/2php_9zkhprrb.js": "4f91e63b1181693e7a3b269b1b24004d9abee13413b8396a916799b8c01620e8",
"job-tracker-ui/out/_next/static/chunks/2pllop_q35dkw.js": "21c9a7c53763010317a2d09460066017e1fd192691e6a0bd83ed20ea6e1fe9dd",
"job-tracker-ui/out/_next/static/chunks/2s2gjr6ro25dj.js": "7489e2ac285a05b563c2bcb4eaf9274bf930f2a7385f17d6d5e6850064b88b10",
"job-tracker-ui/out/_next/static/chunks/2sj7ufu_6n9af.js": "69d7471c01b8001d52abc848910a8c35457dac3aaa4ce66eae2a03ca29ad623b",
"job-tracker-ui/out/_next/static/chunks/2vo512u2siee8.js": "30cdfec178acfe49c1e0ae28fb23c67507bcf7f7b17008b48c05198f638c348d",
"job-tracker-ui/out/_next/static/chunks/30-q9iimktiql.js": "db89d5da1f101216d7f99e9518dc7f5ed84f8b40ac84a6ea55f73c01bf1aca1b",
"job-tracker-ui/out/_next/static/chunks/315n7snxk3fgw.js": "1993429aafa0753d5e9fd1ca63a4f6079ce7f7f37faa44716191f59c972c4d41",
"job-tracker-ui/out/_next/static/chunks/33at73n-mzpir.js": "1605cc3311cc6ca3b2f44b2e0217fe5441a2799fa32b0b0c94d7634f4861ac83",
"job-tracker-ui/out/_next/static/chunks/357yqeklh7414.js": "0192ab7198ebbe299d34a934c504dd4b562d1cccebb6e9d4c5163930c881b14c",
"job-tracker-ui/out/_next/static/chunks/35_dl1zkx1-zx.js": "69bb75afcbd9ea9c0b7e870eb2b5796bdb24d0db7810573302fa04a497cc2c8c",
"job-tracker-ui/out/_next/static/chunks/35pq4ixaltkev.js": "f1e9d53e2481de01d7b04aa938397c2545b7d7dc42ce3d0ac5cd3f1141bda182",
"job-tracker-ui/out/_next/static/chunks/3_4dnl1l3809g.js": "50288c2864a9e8c7ef25c93762edb86e4e617778737b5b5a028c53c5b93d3b70",
"job-tracker-ui/out/_next/static/chunks/3bqn9b34na0b9.js": "f1b8ebcc1b22251c33c9f3a5d11c1f893cad2da2e8744a441e790f7347aa9e73",
"job-tracker-ui/out/_next/static/chunks/3gkylew_qn7cw.js": "7e6c74c81be0c41ab433e36d65b914f62c48f332922e27f7cc953476f4dd78cb",
"job-tracker-ui/out/_next/static/chunks/3la4obitihzpv.js": "9a5a57b46db389b98f1fd5baa86eba1a360300dae9d1ff3ffeae7bc3378135b9",
"job-tracker-ui/out/_next/static/chunks/3nzgmz1t8r_64.js": "de2688cd6bfc8b411e9445d857cd1d776f9960f9d63e9f06c24cbc2a98040fca",
"job-tracker-ui/out/_next/static/chunks/3q4v10rrqy40n.js": "d87ff7b7a0f07d0d92eab3876481eb686a12d9c43d8b92cbe406aefa227a11c1",
"job-tracker-ui/out/_next/static/chunks/3xbcgmkebja05.js": "bb1e98db2657a4b067676ead2ea26172478a79c1b384a9f9fe6588e1481d33ee",
"job-tracker-ui/out/_next/static/chunks/turbopack-25fzg9ay_1ss-.js": "c40f39e993a30c96d6247bb3a7b581538bb046efe8ef8ec07bea3ba32291750f",
"job-tracker-ui/out/_next/static/KgOLT2oshx6dHtAKI5NUs/_buildManifest.js": "9476e0afd3f9da68a64e6ec58631191fd3eaca62c9f5a377e7517fe9a89e59ea",
"job-tracker-ui/out/_next/static/KgOLT2oshx6dHtAKI5NUs/_clientMiddlewareManifest.js": "5483e3295dc35dfe29ea932efc85341c916f10ff78ff5b0e965e003710893a4a",
"job-tracker-ui/out/_next/static/KgOLT2oshx6dHtAKI5NUs/_ssgManifest.js": "678f6ce2cb80b1fe72fc67e7412be6e2ab6ada083111b64f7c40d35e3cba5e00",
"job-tracker-ui/out/_not-found/__next._full.txt": "37dee5851fdf4b1bbaabdc143380d8dffdd07999a2c08756fd68b713ecc4826f",
"job-tracker-ui/out/_not-found/__next._not-found/__PAGE__.txt": "001d6c3334faac5f519229a9ad22a7f8b9999e853165ea57cefdf069bd79b554",
"job-tracker-ui/out/_not-found/__next._tree.txt": "023a4c313d4706642914da119ee1fc32ea6628de40a1e8231c294f1b5c6d02ad",
"job-tracker-ui/out/_not-found.html": "1ca05af72181de6df1a2b0c07fe5d151fb058344c07e204a78648db4ec1c6e64",
"job-tracker-ui/out/_not-found.txt": "37dee5851fdf4b1bbaabdc143380d8dffdd07999a2c08756fd68b713ecc4826f",
"job-tracker-ui/out/favicon.ico": "8d4923e2c487805ea9f852a685b2cf0fb10512ded8290d2a5c37d1cc8fd0702a",
"job-tracker-ui/out/favicon.svg": "63ecf8f37f8bb146ecfae3917187c6b692d4e801641e8a314486a4007912f3a3",
"job-tracker-ui/out/index.html": "85cacbcd2e4209f2fc1af7e22b6e0d7ef23b3d2fd8612b4a8b105b545a9f6586",
"job-tracker-ui/out/index.txt": "dae993f53affb686262f8ae8e75718ef05b43cdf4b9b7391376fe8ca4fe41ccf",
"job-tracker-ui/out/logo192.png": "bc652031597fabd19b9f14e22a71f809490d218037521b3b64d013418c1390b4",
"job-tracker-ui/out/logo512.png": "5129e9bc1ba812b711fd9a646d3a38a906d365a26ee685df183b8752458944d4",
"job-tracker-ui/out/manifest.json": "2667ce63c2e0835b7007239816a5597639321d333da396a78638dfa9e8a7c935",
"job-tracker-ui/out/mockups/dashboard.svg": "318be3adb1324c26eb30f05572a29528a3e38331c6a604652eef75b54f8c29dc",
"job-tracker-ui/out/mockups/pipeline.svg": "db2ef41faabeb90e7ce85413e168581686c54535d970fc7d8deda3888a479de4",
"job-tracker-ui/out/mockups/workspace.svg": "9bbab22349147c7b01d6e18c93c622a6f8aed6dedaf23715189ab54d60e1ddbd",
"job-tracker-ui/out/robots.txt": "e5ab0d231eeb01b4a982d1c79a6729cac9797ad15a69247e4f28ba6afc149b4c"
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 109 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 109 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 109 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

@@ -0,0 +1,117 @@
{
"journeys": [
{
"name": "390-nb-dark",
"counts": [
0,
1,
2
],
"downloads": 3
},
{
"name": "1440-en-light",
"counts": [
0,
1,
2
],
"downloads": 3
}
],
"downloads": [
{
"name": "390-nb-dark",
"kind": "converted",
"expectedCount": 0,
"filename": "390-nb-dark-converted-0.gz",
"bytes": 2,
"rawSha256": "4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945",
"gzipSha256": "50c15d921df28492e2d9bf2da5d1cd5c78ee416bdcf478074db63d76d2381cba"
},
{
"name": "390-nb-dark",
"kind": "converted",
"expectedCount": 1,
"filename": "390-nb-dark-converted-1.gz",
"bytes": 235,
"rawSha256": "6af2ec936c07ea767b72978f5e31f17bd750fb942628b6765a5befb544a60bf5",
"gzipSha256": "2117b71f51b07c27587ff99d40acd9ef43b538a62658ce52ea060ab4a3c2cba5"
},
{
"name": "390-nb-dark",
"kind": "converted",
"expectedCount": 2,
"filename": "390-nb-dark-converted-2.gz",
"bytes": 468,
"rawSha256": "18a8f3b661dc979e030446ecb3977e92fa083e81a73e96847811ba26a861409a",
"gzipSha256": "7f3553fe748c77febb7f3b312d152002e44c1608e05e99b05b7865dac0154326"
},
{
"name": "1440-en-light",
"kind": "converted",
"expectedCount": 0,
"filename": "1440-en-light-converted-0.gz",
"bytes": 2,
"rawSha256": "4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945",
"gzipSha256": "50c15d921df28492e2d9bf2da5d1cd5c78ee416bdcf478074db63d76d2381cba"
},
{
"name": "1440-en-light",
"kind": "converted",
"expectedCount": 1,
"filename": "1440-en-light-converted-1.gz",
"bytes": 235,
"rawSha256": "6af2ec936c07ea767b72978f5e31f17bd750fb942628b6765a5befb544a60bf5",
"gzipSha256": "2117b71f51b07c27587ff99d40acd9ef43b538a62658ce52ea060ab4a3c2cba5"
},
{
"name": "1440-en-light",
"kind": "converted",
"expectedCount": 2,
"filename": "1440-en-light-converted-2.gz",
"bytes": 468,
"rawSha256": "18a8f3b661dc979e030446ecb3977e92fa083e81a73e96847811ba26a861409a",
"gzipSha256": "7f3553fe748c77febb7f3b312d152002e44c1608e05e99b05b7865dac0154326"
}
],
"captures": [
{
"name": "390-nb-dark",
"count": 0,
"violations": []
},
{
"name": "390-nb-dark",
"count": 1,
"violations": []
},
{
"name": "390-nb-dark",
"count": 2,
"violations": []
},
{
"name": "1440-en-light",
"count": 0,
"violations": []
},
{
"name": "1440-en-light",
"count": 1,
"violations": []
},
{
"name": "1440-en-light",
"count": 2,
"violations": []
}
],
"errors": [],
"writes": [],
"unavailableReads": [],
"blockedExternal": [
"https://fonts.googleapis.com",
"https://fonts.googleapis.com"
]
}
@@ -0,0 +1,3 @@
Checking 390-nb-dark
Checking 1440-en-light
PASS 2 configurations, 6 native downloads, 6 accessibility scans; no API writes
@@ -0,0 +1,23 @@
> job-tracker-ui@0.1.0 build
> node --max-old-space-size=4096 ./node_modules/next/dist/bin/next build
▲ Next.js 16.4.1 (Turbopack)
✓ Running next.config.js took 31ms
Creating an optimized production build ...
✓ Compiled successfully in 507ms
Running TypeScript ...
Finished TypeScript in 12.7s ...
Collecting page data using 4 workers ...
Generating static pages using 4 workers (0/3) ...
✓ Generating static pages using 4 workers (3/3) in 797ms
Finalizing page optimization ...
Route (app)
┌ ○ /
└ ○ /_not-found
○ (Static) prerendered as static content
@@ -0,0 +1,220 @@
> job-tracker-ui@0.1.0 test
> jest --runInBand job-export-lifetime.test.tsx
FAIL src/job-export-lifetime.test.tsx (10.566 s)
● en conversion distinguishes zero, one and multiple rows
Unable to find an element with the text: Converted 1 row to import JSON.. This could be because the text is broken up by multiple elements. In this case, you can provide a function for your text matcher to make your matcher more flexible.
Ignored nodes: comments, script, style
<body>
<div>
<section
aria-labelledby="_r_2b_"
class="MuiBox-root css-s8beop"
>
<header
class="MuiBox-root css-163u82n"
>
<div
class="MuiBox-root css-14m33b5"
>
<h3
class="MuiTypography-root MuiTypography-sectionTitle css-uf4832-MuiTypography-root"
id="_r_2b_"
>
Import / Export
</h3>
<p
class="MuiTypography-root MuiTypography-pageDescription css-1sqgc3a-MuiTypography-root"
>
Import expects the JSON exported by this app (an array of job objects with embedded company).
</p>
</div>
</header>
<div
class="MuiBox-root css-31l7gp"
>
<div
aria-busy="false"
aria-label="Import / Export"
class="MuiBox-root css-dtwbgt"
role="group"
tabindex="-1"
>
<p
class="MuiTypography-root MuiTypography-body2 css-1qf9eb3-MuiTypography-root"
>
Imports create new jobs from supported fields. IDs, owners, history, attachments and CV associations are not restored. Keep Settings open until the import finishes. If you leave, the import may be incomplete.
</p>
<div
class="MuiBox-root css-14qhqxr"
>
<button
class="MuiButtonBase-root MuiButton-root MuiButton-outlined MuiButton-outlinedPrimary MuiButton-sizeMedium MuiButton-outlinedSizeMedium MuiButton-colorPrimary MuiButton-root MuiButton-outlined MuiButton-outlinedPrimary MuiButton-sizeMedium MuiButton-outlinedSizeMedium MuiButton-colorPrimary css-1g6yn02-MuiButtonBase-root-MuiButton-root"
tabindex="0"
type="button"
>
Export JSON
</button>
<button
class="MuiButtonBase-root MuiButton-root MuiButton-outlined MuiButton-outlinedPrimary MuiButton-sizeMedium MuiButton-outlinedSizeMedium MuiButton-colorPrimary MuiButton-root MuiButton-outlined MuiButton-outlinedPrimary MuiButton-sizeMedium MuiButton-outlinedSizeMedium MuiButton-colorPrimary css-1g6yn02-MuiButtonBase-root-MuiButton-root"
tabindex="0"
type="button"
>
Export CSV
</button>
<button
class="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-colorPrimary MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-colorPrimary css-83fk99-MuiButtonBase-root-MuiButton-root"
tabindex="0"
type="button"
>
Import JSON
</button>
<input
accept="application/json"
hidden=""
type="file"
/>
<button
class="MuiButtonBase-root MuiButton-root MuiButton-outlined MuiButton-outlinedPrimary MuiButton-sizeMedium MuiButton-outlinedSizeMedium MuiButton-colorPrimary MuiButton-root MuiButton-outlined MuiButton-outlinedPrimary MuiButton-sizeMedium MuiButton-outlinedSizeMedium MuiButton-colorPrimary css-1g6yn02-MuiButtonBase-root-MuiButton-root"
tabindex="0"
type="button"
>
Convert CSV to Import JSON
</button>
<input
accept=".csv,text/csv"
hidden=""
type="file"
/>
</div>
</div>
</div>
</section>
</div>
</body>
104 | await act(async () => fireEvent.change(document.querySelector('input[accept=".csv,text/csv"]')!, { target: { files: [file] } }));
105 | const message = language === "en" ? `Converted ${count} ${count === 1 ? "row" : "rows"} to import JSON.` : `Konverterte ${count} ${count === 1 ? "rad" : "rader"} til import-JSON.`;
> 106 | expect(await screen.findByText(message)).toBeVisible();
| ^
107 | }
108 | expect(download).toHaveBeenCalledTimes(3); expect(client.post).not.toHaveBeenCalled();
109 | });
at waitForWrapper (node_modules/@testing-library/dom/dist/wait-for.js:163:27)
at node_modules/@testing-library/dom/dist/query-helpers.js:86:33
at findByText (src/job-export-lifetime.test.tsx:106:25)
● nb conversion distinguishes zero, one and multiple rows
Unable to find an element with the text: Konverterte 1 rad til import-JSON.. This could be because the text is broken up by multiple elements. In this case, you can provide a function for your text matcher to make your matcher more flexible.
Ignored nodes: comments, script, style
<body>
<div>
<section
aria-labelledby="_r_2h_"
class="MuiBox-root css-s8beop"
>
<header
class="MuiBox-root css-163u82n"
>
<div
class="MuiBox-root css-14m33b5"
>
<h3
class="MuiTypography-root MuiTypography-sectionTitle css-uf4832-MuiTypography-root"
id="_r_2h_"
>
Import / eksport
</h3>
<p
class="MuiTypography-root MuiTypography-pageDescription css-1sqgc3a-MuiTypography-root"
>
Import forventer JSON eksportert av denne appen (en matrise med jobbobjekter med innebygd selskap).
</p>
</div>
</header>
<div
class="MuiBox-root css-31l7gp"
>
<div
aria-busy="false"
aria-label="Import / eksport"
class="MuiBox-root css-dtwbgt"
role="group"
tabindex="-1"
>
<p
class="MuiTypography-root MuiTypography-body2 css-1qf9eb3-MuiTypography-root"
>
Import oppretter nye jobber fra støttede felt. ID-er, eiere, historikk, vedlegg og CV-koblinger gjenopprettes ikke. Hold Innstillinger åpent til importen er ferdig. Hvis du går ut, kan importen bli ufullstendig.
</p>
<div
class="MuiBox-root css-14qhqxr"
>
<button
class="MuiButtonBase-root MuiButton-root MuiButton-outlined MuiButton-outlinedPrimary MuiButton-sizeMedium MuiButton-outlinedSizeMedium MuiButton-colorPrimary MuiButton-root MuiButton-outlined MuiButton-outlinedPrimary MuiButton-sizeMedium MuiButton-outlinedSizeMedium MuiButton-colorPrimary css-1g6yn02-MuiButtonBase-root-MuiButton-root"
tabindex="0"
type="button"
>
Eksporter JSON
</button>
<button
class="MuiButtonBase-root MuiButton-root MuiButton-outlined MuiButton-outlinedPrimary MuiButton-sizeMedium MuiButton-outlinedSizeMedium MuiButton-colorPrimary MuiButton-root MuiButton-outlined MuiButton-outlinedPrimary MuiButton-sizeMedium MuiButton-outlinedSizeMedium MuiButton-colorPrimary css-1g6yn02-MuiButtonBase-root-MuiButton-root"
tabindex="0"
type="button"
>
Eksporter CSV
</button>
<button
class="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-colorPrimary MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-colorPrimary css-83fk99-MuiButtonBase-root-MuiButton-root"
tabindex="0"
type="button"
>
Importer JSON
</button>
<input
accept="application/json"
hidden=""
type="file"
/>
<button
class="MuiButtonBase-root MuiButton-root MuiButton-outlined MuiButton-outlinedPrimary MuiButton-sizeMedium MuiButton-outlinedSizeMedium MuiButton-colorPrimary MuiButton-root MuiButton-outlined MuiButton-outlinedPrimary MuiButton-sizeMedium MuiButton-outlinedSizeMedium MuiButton-colorPrimary css-1g6yn02-MuiButtonBase-root-MuiButton-root"
tabindex="0"
type="button"
>
Konverter CSV til import-JSON
</button>
<input
accept=".csv,text/csv"
hidden=""
type="file"
/>
</div>
</div>
</div>
</section>
</div>
</body>
104 | await act(async () => fireEvent.change(document.querySelector('input[accept=".csv,text/csv"]')!, { target: { files: [file] } }));
105 | const message = language === "en" ? `Converted ${count} ${count === 1 ? "row" : "rows"} to import JSON.` : `Konverterte ${count} ${count === 1 ? "rad" : "rader"} til import-JSON.`;
> 106 | expect(await screen.findByText(message)).toBeVisible();
| ^
107 | }
108 | expect(download).toHaveBeenCalledTimes(3); expect(client.post).not.toHaveBeenCalled();
109 | });
at waitForWrapper (node_modules/@testing-library/dom/dist/wait-for.js:163:27)
at node_modules/@testing-library/dom/dist/query-helpers.js:86:33
at findByText (src/job-export-lifetime.test.tsx:106:25)
Test Suites: 1 failed, 1 total
Tests: 2 failed, 14 passed, 16 total
Snapshots: 0 total
Time: 11.391 s
Ran all test suites matching job-export-lifetime.test.tsx.
@@ -0,0 +1,238 @@
> job-tracker-ui@0.1.0 test
> jest --runInBand job-import.test.tsx
FAIL src/job-import.test.tsx (11.145 s)
● en import feedback distinguishes one job from multiple jobs
Unable to find an element with the text: Imported 1 job.. This could be because the text is broken up by multiple elements. In this case, you can provide a function for your text matcher to make your matcher more flexible.
Ignored nodes: comments, script, style
<body>
<div>
<button>
Toggle import panel
</button>
<section
aria-labelledby="_r_0_"
class="MuiBox-root css-s8beop"
>
<header
class="MuiBox-root css-163u82n"
>
<div
class="MuiBox-root css-14m33b5"
>
<h3
class="MuiTypography-root MuiTypography-sectionTitle css-uf4832-MuiTypography-root"
id="_r_0_"
>
Import / Export
</h3>
<p
class="MuiTypography-root MuiTypography-pageDescription css-1sqgc3a-MuiTypography-root"
>
Import expects the JSON exported by this app (an array of job objects with embedded company).
</p>
</div>
</header>
<div
class="MuiBox-root css-31l7gp"
>
<div
aria-busy="false"
aria-label="Import / Export"
class="MuiBox-root css-dtwbgt"
role="group"
tabindex="-1"
>
<p
class="MuiTypography-root MuiTypography-body2 css-1qf9eb3-MuiTypography-root"
>
Imports create new jobs from supported fields. IDs, owners, history, attachments and CV associations are not restored. Keep Settings open until the import finishes. If you leave, the import may be incomplete.
</p>
<div
class="MuiBox-root css-14qhqxr"
>
<button
class="MuiButtonBase-root MuiButton-root MuiButton-outlined MuiButton-outlinedPrimary MuiButton-sizeMedium MuiButton-outlinedSizeMedium MuiButton-colorPrimary MuiButton-root MuiButton-outlined MuiButton-outlinedPrimary MuiButton-sizeMedium MuiButton-outlinedSizeMedium MuiButton-colorPrimary css-1g6yn02-MuiButtonBase-root-MuiButton-root"
tabindex="0"
type="button"
>
Export JSON
</button>
<button
class="MuiButtonBase-root MuiButton-root MuiButton-outlined MuiButton-outlinedPrimary MuiButton-sizeMedium MuiButton-outlinedSizeMedium MuiButton-colorPrimary MuiButton-root MuiButton-outlined MuiButton-outlinedPrimary MuiButton-sizeMedium MuiButton-outlinedSizeMedium MuiButton-colorPrimary css-1g6yn02-MuiButtonBase-root-MuiButton-root"
tabindex="0"
type="button"
>
Export CSV
</button>
<button
class="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-colorPrimary MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-colorPrimary css-83fk99-MuiButtonBase-root-MuiButton-root"
tabindex="0"
type="button"
>
Import JSON
</button>
<input
accept="application/json"
hidden=""
type="file"
/>
<button
class="MuiButtonBase-root MuiButton-root MuiButton-outlined MuiButton-outlinedPrimary MuiButton-sizeMedium MuiButton-outlinedSizeMedium MuiButton-colorPrimary MuiButton-root MuiButton-outlined MuiButton-outlinedPrimary MuiButton-sizeMedium MuiButton-outlinedSizeMedium MuiButton-colorPrimary css-1g6yn02-MuiButtonBase-root-MuiButton-root"
tabindex="0"
type="button"
>
Convert CSV to Import JSON
</button>
<input
accept=".csv,text/csv"
hidden=""
type="file"
/>
</div>
<p
class="MuiTypography-root MuiTypography-body2 css-1qf9eb3-MuiTypography-root"
role="status"
>
Last import: 1
</p>
</div>
</div>
</section>
</div>
</body>
60 | await select(selectedFile(Array.from({ length: count }, (_, i) => row(`Synthetic role ${i + 1}`))));
61 | const message = language === "en" ? `Imported ${count} ${count === 1 ? "job" : "jobs"}.` : `Importerte ${count} ${count === 1 ? "jobb" : "jobber"}.`;
> 62 | expect(await screen.findByText(message)).toBeVisible();
| ^
63 | }
64 | expect(mockedApi.post).toHaveBeenCalledTimes(6);
65 | });
at waitForWrapper (node_modules/@testing-library/dom/dist/wait-for.js:163:27)
at node_modules/@testing-library/dom/dist/query-helpers.js:86:33
at findByText (src/job-import.test.tsx:62:25)
● nb import feedback distinguishes one job from multiple jobs
Unable to find an element with the text: Importerte 1 jobb.. This could be because the text is broken up by multiple elements. In this case, you can provide a function for your text matcher to make your matcher more flexible.
Ignored nodes: comments, script, style
<body>
<div>
<button>
Toggle import panel
</button>
<section
aria-labelledby="_r_6_"
class="MuiBox-root css-s8beop"
>
<header
class="MuiBox-root css-163u82n"
>
<div
class="MuiBox-root css-14m33b5"
>
<h3
class="MuiTypography-root MuiTypography-sectionTitle css-uf4832-MuiTypography-root"
id="_r_6_"
>
Import / eksport
</h3>
<p
class="MuiTypography-root MuiTypography-pageDescription css-1sqgc3a-MuiTypography-root"
>
Import forventer JSON eksportert av denne appen (en matrise med jobbobjekter med innebygd selskap).
</p>
</div>
</header>
<div
class="MuiBox-root css-31l7gp"
>
<div
aria-busy="false"
aria-label="Import / eksport"
class="MuiBox-root css-dtwbgt"
role="group"
tabindex="-1"
>
<p
class="MuiTypography-root MuiTypography-body2 css-1qf9eb3-MuiTypography-root"
>
Import oppretter nye jobber fra støttede felt. ID-er, eiere, historikk, vedlegg og CV-koblinger gjenopprettes ikke. Hold Innstillinger åpent til importen er ferdig. Hvis du går ut, kan importen bli ufullstendig.
</p>
<div
class="MuiBox-root css-14qhqxr"
>
<button
class="MuiButtonBase-root MuiButton-root MuiButton-outlined MuiButton-outlinedPrimary MuiButton-sizeMedium MuiButton-outlinedSizeMedium MuiButton-colorPrimary MuiButton-root MuiButton-outlined MuiButton-outlinedPrimary MuiButton-sizeMedium MuiButton-outlinedSizeMedium MuiButton-colorPrimary css-1g6yn02-MuiButtonBase-root-MuiButton-root"
tabindex="0"
type="button"
>
Eksporter JSON
</button>
<button
class="MuiButtonBase-root MuiButton-root MuiButton-outlined MuiButton-outlinedPrimary MuiButton-sizeMedium MuiButton-outlinedSizeMedium MuiButton-colorPrimary MuiButton-root MuiButton-outlined MuiButton-outlinedPrimary MuiButton-sizeMedium MuiButton-outlinedSizeMedium MuiButton-colorPrimary css-1g6yn02-MuiButtonBase-root-MuiButton-root"
tabindex="0"
type="button"
>
Eksporter CSV
</button>
<button
class="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-colorPrimary MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-colorPrimary css-83fk99-MuiButtonBase-root-MuiButton-root"
tabindex="0"
type="button"
>
Importer JSON
</button>
<input
accept="application/json"
hidden=""
type="file"
/>
<button
class="MuiButtonBase-root MuiButton-root MuiButton-outlined MuiButton-outlinedPrimary MuiButton-sizeMedium MuiButton-outlinedSizeMedium MuiButton-colorPrimary MuiButton-root MuiButton-outlined MuiButton-outlinedPrimary MuiButton-sizeMedium MuiButton-outlinedSizeMedium MuiButton-colorPrimary css-1g6yn02-MuiButtonBase-root-MuiButton-root"
tabindex="0"
type="button"
>
Konverter CSV til import-JSON
</button>
<input
accept=".csv,text/csv"
hidden=""
type="file"
/>
</div>
<p
class="MuiTypography-root MuiTypography-body2 css-1qf9eb3-MuiTypography-root"
role="status"
>
Siste import: 1
</p>
</div>
</div>
</section>
</div>
</body>
60 | await select(selectedFile(Array.from({ length: count }, (_, i) => row(`Synthetic role ${i + 1}`))));
61 | const message = language === "en" ? `Imported ${count} ${count === 1 ? "job" : "jobs"}.` : `Importerte ${count} ${count === 1 ? "jobb" : "jobber"}.`;
> 62 | expect(await screen.findByText(message)).toBeVisible();
| ^
63 | }
64 | expect(mockedApi.post).toHaveBeenCalledTimes(6);
65 | });
at waitForWrapper (node_modules/@testing-library/dom/dist/wait-for.js:163:27)
at node_modules/@testing-library/dom/dist/query-helpers.js:86:33
at findByText (src/job-import.test.tsx:62:25)
Test Suites: 1 failed, 1 total
Tests: 2 failed, 11 passed, 13 total
Snapshots: 0 total
Time: 11.99 s
Ran all test suites matching job-import.test.tsx.
@@ -0,0 +1,10 @@
> job-tracker-ui@0.1.0 test
> jest --runInBand job-export-lifetime.test.tsx job-import.test.tsx settings-import-lifetime.test.tsx file-picker-activation.test.tsx translation-catalogue.test.ts i18n-provider.test.tsx
Test Suites: 6 passed, 6 total
Tests: 50 passed, 50 total
Snapshots: 0 total
Time: 10.554 s
Ran all test suites matching job-export-lifetime.test.tsx|job-import.test.tsx|settings-import-lifetime.test.tsx|file-picker-activation.test.tsx|translation-catalogue.test.ts|i18n-provider.test.tsx.