diff options
Diffstat (limited to 'cli/tests/integration/cache_tests.rs')
-rw-r--r-- | cli/tests/integration/cache_tests.rs | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/cli/tests/integration/cache_tests.rs b/cli/tests/integration/cache_tests.rs index 32508a95a..7975cbf19 100644 --- a/cli/tests/integration/cache_tests.rs +++ b/cli/tests/integration/cache_tests.rs @@ -127,3 +127,57 @@ fn cache_matching_package_json_dep_should_not_install_all() { "Initialize @types/node@18.8.2\n", )); } + +// Regression test for https://github.com/denoland/deno/issues/17299 +#[test] +fn cache_put_overwrite() { + let test_context = TestContextBuilder::new().use_temp_cwd().build(); + let temp_dir = test_context.temp_dir(); + + let part_one = r#" + const req = new Request('http://localhost/abc'); + const res1 = new Response('res1'); + const res2 = new Response('res2'); + + const cache = await caches.open('test'); + + await cache.put(req, res1); + await cache.put(req, res2); + + const res = await cache.match(req).then((res) => res?.text()); + console.log(res); + "#; + + let part_two = r#" + const req = new Request("http://localhost/abc"); + const res1 = new Response("res1"); + const res2 = new Response("res2"); + + const cache = await caches.open("test"); + + // Swap the order of put() calls. + await cache.put(req, res2); + await cache.put(req, res1); + + const res = await cache.match(req).then((res) => res?.text()); + console.log(res); + "#; + + temp_dir.write("cache_put.js", part_one); + + let run_command = + test_context.new_command().args_vec(["run", "cache_put.js"]); + + let output = run_command.run(); + output.assert_matches_text("res2\n"); + output.assert_exit_code(0); + + // The wait will surface the bug as we check last written time + // when we overwrite a response. + std::thread::sleep(std::time::Duration::from_secs(1)); + + temp_dir.write("cache_put.js", part_two); + let output = run_command.run(); + output.assert_matches_text("res1\n"); + output.assert_exit_code(0); +} |