From bbc9fae4291d0c2cb3976d158ecd20e0bd2a8ea0 Mon Sep 17 00:00:00 2001 From: Wojtek Kosior Date: Tue, 15 Mar 2022 10:12:06 +0100 Subject: serialize and deserialize entire Response object when relaying fetch() calls to other contexts using sendMessage --- test/haketilo_test/unit/test_repo_query.py | 64 ++++++++++++++++-------------- 1 file changed, 34 insertions(+), 30 deletions(-) (limited to 'test/haketilo_test/unit/test_repo_query.py') diff --git a/test/haketilo_test/unit/test_repo_query.py b/test/haketilo_test/unit/test_repo_query.py index f6cae93..c785406 100644 --- a/test/haketilo_test/unit/test_repo_query.py +++ b/test/haketilo_test/unit/test_repo_query.py @@ -29,7 +29,7 @@ repo_urls = [f'https://hydril.la/{s}' for s in ('', '1/', '2/', '3/', '4/')] queried_url = 'https://example_a.com/something' def setup_view(execute_in_page, repo_urls, tab={'id': 0}): - mock_cacher(execute_in_page) + execute_in_page(mock_cacher_code) execute_in_page(load_script('html/repo_query.js')) execute_in_page( @@ -185,8 +185,10 @@ def test_repo_query_messages(driver, execute_in_page, message): elif message == 'failure_to_communicate': setup_view(execute_in_page, repo_urls) execute_in_page( - 'browser.tabs.sendMessage = () => Promise.resolve({error: "sth"});' - ) + ''' + window.mock_cacher_fetch = + () => {throw new Error("Something happened :o")}; + ''') show_and_wait_for_repo_entry() elem = execute_in_page('returnval(view.repo_entries[0].info_div);') @@ -196,8 +198,8 @@ def test_repo_query_messages(driver, execute_in_page, message): setup_view(execute_in_page, repo_urls) execute_in_page( ''' - const response = {ok: false, status: 405}; - browser.tabs.sendMessage = () => Promise.resolve(response); + const response = new Response("", {status: 405}); + window.mock_cacher_fetch = () => Promise.resolve(response); ''') show_and_wait_for_repo_entry() @@ -208,8 +210,8 @@ def test_repo_query_messages(driver, execute_in_page, message): setup_view(execute_in_page, repo_urls) execute_in_page( ''' - const response = {ok: true, status: 200, error_json: "sth"}; - browser.tabs.sendMessage = () => Promise.resolve(response); + const response = new Response("sth", {status: 200}); + window.mock_cacher_fetch = () => Promise.resolve(response); ''') show_and_wait_for_repo_entry() @@ -220,12 +222,11 @@ def test_repo_query_messages(driver, execute_in_page, message): setup_view(execute_in_page, repo_urls) execute_in_page( ''' - const response = { - ok: true, - status: 200, - json: {$schema: "https://hydrilla.koszko.org/schemas/api_query_result-255.2.1.schema.json"} - }; - browser.tabs.sendMessage = () => Promise.resolve(response); + const newer_schema_url = + "https://hydrilla.koszko.org/schemas/api_query_result-255.2.1.schema.json"; + const mocked_json_data = JSON.stringify({$schema: newer_schema_url}); + const response = new Response(mocked_json_data, {status: 200}); + window.mock_cacher_fetch = () => Promise.resolve(response); ''') show_and_wait_for_repo_entry() @@ -236,13 +237,19 @@ def test_repo_query_messages(driver, execute_in_page, message): setup_view(execute_in_page, repo_urls) execute_in_page( ''' - const response = { - ok: true, - status: 200, - /* $schema is not a string as it should be. */ - json: {$schema: null} - }; - browser.tabs.sendMessage = () => Promise.resolve(response); + window.mock_cacher_fetch = async function(...args) { + const response = await fetch(...args); + const json = await response.json(); + + /* $schema is no longer a string as it should be. */ + json.$schema = null; + + return new Response(JSON.stringify(json), { + status: response.status, + statusText: response.statusText, + headers: [...response.headers.entries()] + }); + } ''') show_and_wait_for_repo_entry() @@ -252,7 +259,7 @@ def test_repo_query_messages(driver, execute_in_page, message): elif message == 'querying_repo': setup_view(execute_in_page, repo_urls) execute_in_page( - 'browser.tabs.sendMessage = () => new Promise(() => {});' + 'window.mock_cacher_fetch = () => new Promise(cb => {});' ) show_and_wait_for_repo_entry() @@ -262,15 +269,12 @@ def test_repo_query_messages(driver, execute_in_page, message): setup_view(execute_in_page, repo_urls) execute_in_page( ''' - const response = { - ok: true, - status: 200, - json: { - $schema: "https://hydrilla.koszko.org/schemas/api_query_result-1.schema.json", - mappings: [] - } - }; - browser.tabs.sendMessage = () => Promise.resolve(response); + const schema_url = + "https://hydrilla.koszko.org/schemas/api_query_result-1.schema.json"; + const mocked_json_data = + JSON.stringify({$schema: schema_url, mappings: []}); + const response = new Response(mocked_json_data, {status: 200}); + window.mock_cacher_fetch = () => Promise.resolve(response); ''') show_and_wait_for_repo_entry() -- cgit v1.2.3