<!DOCTYPE html>
<title>Sub Apps: Valid calls for list()</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="resources/subapps-helpers.js"></script>
<script>

promise_test(async t => {
  t.add_cleanup(async () => {
    await mockSubAppsService.reset();
    mockSubAppsService = null;
  });

  const url_1 = '/sub-app-1';
  const url_2 = '/sub-app-2';

  const mocked_response = [
    { "manifestIdPath": url_1, "appName": "App 1" },
    { "manifestIdPath": url_2, "appName": "App 2" },
  ];

  let expected_results = {
    [url_1]: { "app_name": "App 1" },
    [url_2]: { "app_name": "App 2" },
  };

  await createMockSubAppsService(Status.SUCCESS, [], mocked_response);

  await navigator.subApps.list()
    .catch(e => {
      assert_unreached("Should not have rejected.");
    })
    .then(result => {
      for (const app_id in expected_results) {
        assert_own_property(result, app_id, "Return results are missing entry for subapp.")
        assert_equals(JSON.stringify(result[app_id]), JSON.stringify(expected_results[app_id]), "Return results are not as expected.")
      }
    })
}, 'List API call works with 2 sub apps.');

promise_test(async t => {
  t.add_cleanup(async () => {
    await mockSubAppsService.reset();
    mockSubAppsService = null;
  });

  let mocked_response = [];
  await createMockSubAppsService(Status.SUCCESS, [], mocked_response);
  await navigator.subApps.list()
  .catch(e => {
      assert_unreached("Should not have rejected.");
    })
  .then(result => {
    assert_equals(Object.keys(result).length, 0);
  })
}, 'List API call works with no sub apps.');

</script>