227 lines
11 KiB
JavaScript
227 lines
11 KiB
JavaScript
|
|
describe('CustomizableTestGroupFormTests', () => {
|
|
const scripts = ['instrumentation.js', '../shared/common-component-base.js', 'components/base.js', 'models/data-model.js', 'models/commit-log.js',
|
|
'models/commit-set.js', 'models/repository.js', 'components/test-group-form.js', 'components/customizable-test-group-form.js'];
|
|
|
|
async function createCustomizableTestGroupFormWithContext(context)
|
|
{
|
|
await context.importScripts(scripts, 'ComponentBase', 'DataModelObject', 'Repository', 'CommitLog', 'CommitSet', 'CustomizableTestGroupForm', 'MockRemoteAPI');
|
|
const customizableTestGroupForm = new context.symbols.CustomizableTestGroupForm;
|
|
context.document.body.appendChild(customizableTestGroupForm.element());
|
|
return customizableTestGroupForm;
|
|
}
|
|
|
|
const commitObjectA = {
|
|
"id": "185326",
|
|
"revision": "210948",
|
|
"repository": 1,
|
|
"previousCommit": null,
|
|
"ownsCommits": false,
|
|
"time": 1541494949681,
|
|
"authorName": "Zalan Bujtas",
|
|
"authorEmail": "zalan@apple.com",
|
|
"message": "a message",
|
|
};
|
|
|
|
const commitObjectB = {
|
|
"id": "185334",
|
|
"revision": "210949",
|
|
"repository": 1,
|
|
"previousCommit": null,
|
|
"ownsCommits": false,
|
|
"time": 1541494949682,
|
|
"authorName": "Chris Dumez",
|
|
"authorEmail": "cdumez@apple.com",
|
|
"message": "some message",
|
|
};
|
|
|
|
const commitObjectC = {
|
|
"id": "185336",
|
|
"revision": "210950",
|
|
"repository": 1,
|
|
"previousCommit": null,
|
|
"ownsCommits": false,
|
|
"time": 1541494949682,
|
|
"authorName": "Chris Dumez",
|
|
"authorEmail": "cdumez@apple.com",
|
|
"message": "some message",
|
|
};
|
|
|
|
function cloneObject(object)
|
|
{
|
|
const clone = {};
|
|
for (const [key, value] of Object.entries(object))
|
|
clone[key] = value;
|
|
return clone;
|
|
}
|
|
|
|
it('Changing the value in revision editor should update corresponding commitSet as long as the repository of that row does not have owner', async () => {
|
|
const context = new BrowsingContext();
|
|
const customizableTestGroupForm = await createCustomizableTestGroupFormWithContext(context);
|
|
const repository = context.symbols.Repository.ensureSingleton(1, {name: 'WebKit'});
|
|
|
|
const commitA = cloneObject(commitObjectA);
|
|
const commitB = cloneObject(commitObjectB);
|
|
commitA.repository = repository;
|
|
commitB.repository = repository;
|
|
const webkitCommitA = context.symbols.CommitLog.ensureSingleton(185326, commitA);
|
|
const webkitCommitB = context.symbols.CommitLog.ensureSingleton(185334, commitB);
|
|
const commitSetA = context.symbols.CommitSet.ensureSingleton(1, {revisionItems: [{commit: webkitCommitA}]});
|
|
const commitSetB = context.symbols.CommitSet.ensureSingleton(2, {revisionItems: [{commit: webkitCommitB}]});
|
|
|
|
customizableTestGroupForm.setCommitSetMap({A: commitSetA, B: commitSetB});
|
|
customizableTestGroupForm.content('customize-link').click();
|
|
|
|
const requests = context.symbols.MockRemoteAPI.requests;
|
|
expect(requests.length).to.be(2);
|
|
expect(requests[0].url).to.be('/api/commits/1/210948?prefix-match=true');
|
|
expect(requests[1].url).to.be('/api/commits/1/210949?prefix-match=true');
|
|
requests[0].resolve({commits: [commitObjectA]});
|
|
requests[1].resolve({commits: [commitObjectB]});
|
|
|
|
await requests[0].promise;
|
|
await requests[1].promise;
|
|
|
|
await waitForComponentsToRender(context);
|
|
|
|
const radioButton = customizableTestGroupForm.content('custom-table').querySelector('input[type="radio"][name="A-1-radio"]:not(:checked)');
|
|
radioButton.click();
|
|
expect(radioButton.checked).to.be(true);
|
|
|
|
let revisionEditors = customizableTestGroupForm.content('custom-table').querySelectorAll('input:not([type="radio"])');
|
|
expect(revisionEditors.length).to.be(2);
|
|
let revisionEditor = revisionEditors[0];
|
|
expect(revisionEditor.value).to.be('210949');
|
|
|
|
await waitForComponentsToRender(context);
|
|
revisionEditors = customizableTestGroupForm.content('custom-table').querySelectorAll('input:not([type="radio"])');
|
|
revisionEditor = revisionEditors[0];
|
|
revisionEditor.value = '210948';
|
|
revisionEditor.dispatchEvent(new Event('change'));
|
|
|
|
customizableTestGroupForm.content('name').value = 'a/b test';
|
|
customizableTestGroupForm.content('name').dispatchEvent(new Event('input'));
|
|
|
|
await waitForComponentsToRender(context);
|
|
|
|
// This is a hack by accessing the private member
|
|
// customizableTestGroupForm will use commitSet.updateRevisionForOwnerRepository to update the revision, need to await this to see the input value gets updated to 210948
|
|
await customizableTestGroupForm._commitSetMap.get('A')._fetchCommitLogAndOwnedCommits(repository, '210948');
|
|
// It will enqueue to render, draw a new input with right revision
|
|
await waitForComponentsToRender(context);
|
|
|
|
revisionEditors = customizableTestGroupForm.content('custom-table').querySelectorAll('input:not([type="radio"])');
|
|
revisionEditor = revisionEditors[0];
|
|
expect(revisionEditor.value).to.be('210948');
|
|
});
|
|
|
|
it('should allow user to only provide prefix of a commit as long as the commit is unique in the repository', async () => {
|
|
const context = new BrowsingContext();
|
|
const customizableTestGroupForm = await createCustomizableTestGroupFormWithContext(context);
|
|
const repository = context.symbols.Repository.ensureSingleton(1, {name: 'WebKit'});
|
|
|
|
const commitA = cloneObject(commitObjectA);
|
|
const commitB = cloneObject(commitObjectB);
|
|
const commitC = cloneObject(commitObjectC);
|
|
commitA.repository = repository;
|
|
commitB.repository = repository;
|
|
commitC.repository = repository;
|
|
const webkitCommitA = context.symbols.CommitLog.ensureSingleton(185326, commitA);
|
|
const webkitCommitB = context.symbols.CommitLog.ensureSingleton(185334, commitB);
|
|
const commitSetA = context.symbols.CommitSet.ensureSingleton(1, {revisionItems: [{commit: webkitCommitA}]});
|
|
const commitSetB = context.symbols.CommitSet.ensureSingleton(2, {revisionItems: [{commit: webkitCommitB}]});
|
|
|
|
customizableTestGroupForm.setCommitSetMap({A: commitSetA, B: commitSetB});
|
|
customizableTestGroupForm.content('customize-link').click();
|
|
|
|
const requests = context.symbols.MockRemoteAPI.requests;
|
|
expect(requests.length).to.be(2);
|
|
expect(requests[0].url).to.be('/api/commits/1/210948?prefix-match=true');
|
|
expect(requests[1].url).to.be('/api/commits/1/210949?prefix-match=true');
|
|
requests[0].resolve({commits: [commitObjectA]});
|
|
requests[1].resolve({commits: [commitObjectB]});
|
|
|
|
await requests[0].promise;
|
|
await requests[1].promise;
|
|
|
|
await waitForComponentsToRender(context);
|
|
|
|
const radioButton = customizableTestGroupForm.content('custom-table').querySelector('input[type="radio"][name="A-1-radio"]:not(:checked)');
|
|
radioButton.click();
|
|
expect(radioButton.checked).to.be(true);
|
|
|
|
let revisionEditors = customizableTestGroupForm.content('custom-table').querySelectorAll('input:not([type="radio"])');
|
|
expect(revisionEditors.length).to.be(2);
|
|
let revisionEditor = revisionEditors[0];
|
|
expect(revisionEditor.value).to.be('210949');
|
|
revisionEditor.value = '21095';
|
|
revisionEditor.dispatchEvent(new Event('change'));
|
|
|
|
customizableTestGroupForm.content('name').value = 'a/b test';
|
|
customizableTestGroupForm.content('name').dispatchEvent(new Event('input'));
|
|
expect(requests.length).to.be(3);
|
|
expect(requests[2].url).to.be('/api/commits/1/21095?prefix-match=true');
|
|
requests[2].resolve({commits: [commitObjectC]});
|
|
|
|
await requests[2].promise;
|
|
|
|
await waitForComponentsToRender(context);
|
|
|
|
revisionEditors = customizableTestGroupForm.content('custom-table').querySelectorAll('input:not([type="radio"])');
|
|
revisionEditor = revisionEditors[0];
|
|
expect(revisionEditor.value).to.be('210950');
|
|
});
|
|
|
|
it('should use the commit set map when customize button is clicked as the behavior of radio buttons', async () => {
|
|
const context = new BrowsingContext();
|
|
const customizableTestGroupForm = await createCustomizableTestGroupFormWithContext(context);
|
|
const repository = context.symbols.Repository.ensureSingleton(1, {name: 'WebKit'});
|
|
|
|
const commitA = cloneObject(commitObjectA);
|
|
const commitB = cloneObject(commitObjectB);
|
|
commitA.repository = repository;
|
|
commitB.repository = repository;
|
|
const webkitCommitA = context.symbols.CommitLog.ensureSingleton(185326, commitA);
|
|
const webkitCommitB = context.symbols.CommitLog.ensureSingleton(185334, commitB);
|
|
const commitSetA = context.symbols.CommitSet.ensureSingleton(1, {revisionItems: [{commit: webkitCommitA}]});
|
|
const commitSetB = context.symbols.CommitSet.ensureSingleton(2, {revisionItems: [{commit: webkitCommitB}]});
|
|
|
|
customizableTestGroupForm.setCommitSetMap({A: commitSetA, B: commitSetB});
|
|
customizableTestGroupForm.content('customize-link').click();
|
|
|
|
const requests = context.symbols.MockRemoteAPI.requests;
|
|
expect(requests.length).to.be(2);
|
|
expect(requests[0].url).to.be('/api/commits/1/210948?prefix-match=true');
|
|
expect(requests[1].url).to.be('/api/commits/1/210949?prefix-match=true');
|
|
requests[0].resolve({commits: [commitObjectA]});
|
|
requests[1].resolve({commits: [commitObjectB]});
|
|
await requests[0].promise;
|
|
await requests[1].promise;
|
|
|
|
await waitForComponentsToRender(context);
|
|
|
|
let revisionEditors = customizableTestGroupForm.content('custom-table').querySelectorAll('input:not([type="radio"])');
|
|
expect(revisionEditors.length).to.be(2);
|
|
let revisionEditor = revisionEditors[0];
|
|
expect(revisionEditor.value).to.be('210948');
|
|
revisionEditor.value = '210949';
|
|
revisionEditor.dispatchEvent(new Event('change'));
|
|
|
|
customizableTestGroupForm.content('name').value = 'a/b test';
|
|
customizableTestGroupForm.content('name').dispatchEvent(new Event('input'));
|
|
|
|
await waitForComponentsToRender(context);
|
|
|
|
let radioButton = customizableTestGroupForm.content('custom-table').querySelector('input[type="radio"][name="A-1-radio"]:not(:checked)');
|
|
radioButton.click();
|
|
expect(radioButton.checked).to.be(true);
|
|
radioButton = customizableTestGroupForm.content('custom-table').querySelector('input[type="radio"][name="A-1-radio"]:not(:checked)');
|
|
radioButton.click();
|
|
expect(radioButton.checked).to.be(true);
|
|
|
|
revisionEditors = customizableTestGroupForm.content('custom-table').querySelectorAll('input:not([type="radio"])');
|
|
revisionEditor = revisionEditors[0];
|
|
expect(revisionEditor.value).to.be('210948');
|
|
});
|
|
});
|