blob: 1b2bef4eface8bae62735e17defeed74141e79a7 [file]
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'chrome-untrusted://data-sharing/data_sharing_app.js';
import type {BrowserProxy} from 'chrome-untrusted://data-sharing/browser_proxy.js';
import {BrowserProxyImpl} from 'chrome-untrusted://data-sharing/browser_proxy.js';
import type {PageRemote} from 'chrome-untrusted://data-sharing/data_sharing.mojom-webui.js';
import {PageCallbackRouter} from 'chrome-untrusted://data-sharing/data_sharing.mojom-webui.js';
import {DataSharingApp} from 'chrome-untrusted://data-sharing/data_sharing_app.js';
import {Code} from 'chrome-untrusted://data-sharing/data_sharing_sdk_types.js';
import {DataSharingSdkImpl} from 'chrome-untrusted://data-sharing/dummy_data_sharing_sdk.js';
import {assertEquals} from 'chrome-untrusted://webui-test/chai_assert.js';
import {TestBrowserProxy} from 'chrome-untrusted://webui-test/test_browser_proxy.js';
import {TestMock} from 'chrome-untrusted://webui-test/test_mock.js';
import {microtasksFinished} from 'chrome-untrusted://webui-test/test_util.js';
class TestDataSharingBrowserProxy extends TestBrowserProxy implements
BrowserProxy {
callbackRouter: PageCallbackRouter;
callbackRouterRemote: PageRemote;
constructor() {
super([
'showUi',
'closeUi',
]);
this.callbackRouter = new PageCallbackRouter();
this.callbackRouterRemote =
this.callbackRouter.$.bindNewPipeAndPassRemote();
}
showUi() {
this.methodCalled('showUi');
}
closeUi(status: Code) {
this.methodCalled('closeUi', status);
}
}
suite('Start flows', () => {
let testDataSharingSdk: TestMock<DataSharingSdkImpl>&DataSharingSdkImpl;
let dataSharingApp: DataSharingApp|null = null;
let testBrowserProxy: TestDataSharingBrowserProxy;
setup(async () => {
testBrowserProxy = new TestDataSharingBrowserProxy();
testDataSharingSdk = TestMock.fromClass(DataSharingSdkImpl);
DataSharingSdkImpl.setInstance(testDataSharingSdk);
BrowserProxyImpl.setInstance(testBrowserProxy);
testDataSharingSdk.setResultFor(
'runInviteFlow', Promise.resolve({status: Code.OK}));
testDataSharingSdk.setResultFor(
'runJoinFlow', Promise.resolve({status: Code.OK}));
testDataSharingSdk.setResultFor(
'runManageFlow', Promise.resolve({status: Code.OK}));
});
test('Invite flow', async () => {
DataSharingApp.setUrlForTesting(
'chrome-untrusted://data-sharing?flow=share&tab_group_id=fake_id');
dataSharingApp = document.createElement('data-sharing-app');
testBrowserProxy.callbackRouterRemote.onAccessTokenFetched('fake_token');
document.body.appendChild(dataSharingApp);
await microtasksFinished();
assertEquals(1, testBrowserProxy.getCallCount('showUi'));
assertEquals(1, testDataSharingSdk.getCallCount('runInviteFlow'));
assertEquals(1, testBrowserProxy.getCallCount('closeUi'));
assertEquals(Code.OK, testBrowserProxy.getArgs('closeUi')[0]);
});
test('Manage flow', async () => {
DataSharingApp.setUrlForTesting(
'chrome-untrusted://data-sharing?flow=manage&group_id=fake_id');
dataSharingApp = document.createElement('data-sharing-app');
testBrowserProxy.callbackRouterRemote.onAccessTokenFetched('fake_token');
document.body.appendChild(dataSharingApp);
await microtasksFinished();
assertEquals(1, testBrowserProxy.getCallCount('showUi'));
assertEquals(1, testDataSharingSdk.getCallCount('runManageFlow'));
assertEquals(
'fake_id', testDataSharingSdk.getArgs('runManageFlow')[0].groupId);
assertEquals(1, testBrowserProxy.getCallCount('closeUi'));
assertEquals(Code.OK, testBrowserProxy.getArgs('closeUi')[0]);
});
test('Join flow', async () => {
DataSharingApp.setUrlForTesting(
'chrome-untrusted://data-sharing?flow=join&group_id=fake_group_id&token_secret=fake_token');
dataSharingApp = document.createElement('data-sharing-app');
testBrowserProxy.callbackRouterRemote.onAccessTokenFetched('fake_token');
document.body.appendChild(dataSharingApp);
await microtasksFinished();
assertEquals(1, testBrowserProxy.getCallCount('showUi'));
assertEquals(1, testDataSharingSdk.getCallCount('runJoinFlow'));
const arg = testDataSharingSdk.getArgs('runJoinFlow')[0];
assertEquals('fake_group_id', arg.groupId);
assertEquals('fake_token', arg.tokenSecret);
assertEquals(1, testBrowserProxy.getCallCount('closeUi'));
assertEquals(Code.OK, testBrowserProxy.getArgs('closeUi')[0]);
});
});