blob: 9a6c89e7f0d31f8a28c9f9a29ece6f5d09224b02 [file] [log] [blame]
// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import {assert} from 'chai';
import {extractGridData} from './extract-grid-data.js';
import {extractFieldValuesFromIssue as fieldExtractor,
extractTypeForFieldName as typeExtractor} from 'reducers/projectV0.js';
const extractFieldValuesFromIssue = fieldExtractor({});
const extractTypeForFieldName = typeExtractor({});
describe('extract headings from x and y attributes', () => {
it('no attributes set', () => {
const issues = [
{'localId': 1, 'projectName': 'test'},
{'localId': 2, 'projectName': 'test'},
];
const data = extractGridData({
issues,
extractFieldValuesFromIssue,
});
const expectedIssues = new Map([
['All + All', [
{'localId': 1, 'projectName': 'test'},
{'localId': 2, 'projectName': 'test'},
]],
]);
assert.deepEqual(data.xHeadings, ['All']);
assert.deepEqual(data.yHeadings, ['All']);
assert.deepEqual(data.groupedIssues, expectedIssues);
});
it('extract headings from Attachments attribute', () => {
const issues = [
{'attachmentCount': 1}, {'attachmentCount': 0},
{'attachmentCount': 1},
];
const data = extractGridData({issues, extractFieldValuesFromIssue},
{xFieldName: 'Attachments'});
const expectedIssues = new Map([
['0 + All', [{'attachmentCount': 0}]],
['1 + All', [{'attachmentCount': 1}, {'attachmentCount': 1}]],
]);
assert.deepEqual(data.xHeadings, ['0', '1']);
assert.deepEqual(data.yHeadings, ['All']);
assert.deepEqual(data.groupedIssues, expectedIssues);
});
it('extract headings from Blocked attribute', () => {
const issues = [
{'blockedOnIssueRefs': [{'localId': 21}]},
{'otherIssueProperty': 'issueProperty'},
];
const data = extractGridData({issues, extractFieldValuesFromIssue},
{xFieldName: 'Blocked', yFieldName: ''});
const expectedIssues = new Map();
expectedIssues.set('Yes + All',
[{'blockedOnIssueRefs': [{'localId': 21}]}]);
expectedIssues.set('No + All', [{'otherIssueProperty': 'issueProperty'}]);
assert.deepEqual(data.xHeadings, ['No', 'Yes']);
assert.deepEqual(data.yHeadings, ['All']);
assert.deepEqual(data.groupedIssues, expectedIssues);
});
it('extract headings from BlockedOn attribute', () => {
const issues = [
{'otherIssueProperty': 'issueProperty'},
{'blockedOnIssueRefs': [
{'localId': 3, 'projectName': 'test-projectB'}]},
{'blockedOnIssueRefs': [
{'localId': 3, 'projectName': 'test-projectA'}]},
{'blockedOnIssueRefs': [
{'localId': 3, 'projectName': 'test-projectA'}]},
{'blockedOnIssueRefs': [
{'localId': 1, 'projectName': 'test-projectA'}]},
];
const data = extractGridData({issues, extractFieldValuesFromIssue},
{xFieldName: 'BlockedOn', yFieldName: ''});
const expectedIssues = new Map();
expectedIssues.set('test-projectB:3 + All', [{'blockedOnIssueRefs':
[{'localId': 3, 'projectName': 'test-projectB'}]}]);
expectedIssues.set('test-projectA:3 + All', [{'blockedOnIssueRefs':
[{'localId': 3, 'projectName': 'test-projectA'}]},
{'blockedOnIssueRefs':
[{'localId': 3, 'projectName': 'test-projectA'}]}]);
expectedIssues.set('test-projectA:1 + All', [{'blockedOnIssueRefs':
[{'localId': 1, 'projectName': 'test-projectA'}]}]);
expectedIssues.set('---- + All', [{'otherIssueProperty': 'issueProperty'}]);
assert.deepEqual(data.xHeadings, ['----', 'test-projectA:1',
'test-projectA:3', 'test-projectB:3']);
assert.deepEqual(data.yHeadings, ['All']);
assert.deepEqual(data.groupedIssues, expectedIssues);
});
it('extract headings from Blocking attribute', () => {
const issues = [
{'otherIssueProperty': 'issueProperty'},
{'blockingIssueRefs': [
{'localId': 1, 'projectName': 'test-projectA'}]},
{'blockingIssueRefs': [
{'localId': 1, 'projectName': 'test-projectA'}]},
{'blockingIssueRefs': [
{'localId': 3, 'projectName': 'test-projectA'}]},
{'blockingIssueRefs': [
{'localId': 3, 'projectName': 'test-projectB'}]},
];
const data = extractGridData({issues, extractFieldValuesFromIssue},
{xFieldName: 'Blocking', yFieldName: ''});
const expectedIssues = new Map();
expectedIssues.set('test-projectA:1 + All', [{'blockingIssueRefs':
[{'localId': 1, 'projectName': 'test-projectA'}]},
{'blockingIssueRefs':
[{'localId': 1, 'projectName': 'test-projectA'}]}]);
expectedIssues.set('test-projectA:3 + All', [{'blockingIssueRefs':
[{'localId': 3, 'projectName': 'test-projectA'}]}]);
expectedIssues.set('test-projectB:3 + All', [{'blockingIssueRefs':
[{'localId': 3, 'projectName': 'test-projectB'}]}]);
expectedIssues.set('---- + All', [{'otherIssueProperty': 'issueProperty'}]);
assert.deepEqual(data.xHeadings, ['----', 'test-projectA:1',
'test-projectA:3', 'test-projectB:3']);
assert.deepEqual(data.yHeadings, ['All']);
assert.deepEqual(data.groupedIssues, expectedIssues);
});
it('extract headings from Component attribute', () => {
const issues = [
{'otherIssueProperty': 'issueProperty'},
{'componentRefs': [{'path': 'UI'}]},
{'componentRefs': [{'path': 'API'}]},
{'componentRefs': [{'path': 'UI'}]},
];
const data = extractGridData({issues, extractFieldValuesFromIssue},
{xFieldName: 'Component', yFieldName: ''});
const expectedIssues = new Map();
expectedIssues.set('UI + All', [{'componentRefs': [{'path': 'UI'}]},
{'componentRefs': [{'path': 'UI'}]}]);
expectedIssues.set('API + All', [{'componentRefs': [{'path': 'API'}]}]);
expectedIssues.set('---- + All', [{'otherIssueProperty': 'issueProperty'}]);
assert.deepEqual(data.xHeadings, ['----', 'API', 'UI']);
assert.deepEqual(data.yHeadings, ['All']);
assert.deepEqual(data.groupedIssues, expectedIssues);
});
it('extract headings from Reporter attribute', () => {
const issues = [
{'reporterRef': {'displayName': 'testA@google.com'}},
{'reporterRef': {'displayName': 'testB@google.com'}},
];
const data = extractGridData({issues, extractFieldValuesFromIssue},
{xFieldName: '', yFieldName: 'Reporter'});
const expectedIssues = new Map();
expectedIssues.set('All + testA@google.com',
[{'reporterRef': {'displayName': 'testA@google.com'}}]);
expectedIssues.set('All + testB@google.com',
[{'reporterRef': {'displayName': 'testB@google.com'}}]);
assert.deepEqual(data.xHeadings, ['All']);
assert.deepEqual(data.yHeadings, ['testA@google.com', 'testB@google.com']);
assert.deepEqual(data.groupedIssues, expectedIssues);
});
it('extract headings from Stars attribute', () => {
const issues = [
{'starCount': 1}, {'starCount': 6}, {'starCount': 1},
];
const data = extractGridData({issues, extractFieldValuesFromIssue},
{xFieldName: '', yFieldName: 'Stars'});
const expectedIssues = new Map();
expectedIssues.set('All + 1', [{'starCount': 1}, {'starCount': 1}]);
expectedIssues.set('All + 6', [{'starCount': 6}]);
assert.deepEqual(data.xHeadings, ['All']);
assert.deepEqual(data.yHeadings, ['1', '6']);
assert.deepEqual(data.groupedIssues, expectedIssues);
});
it('extract headings from Status in order of statusDefs provided', () => {
const issues = [
{'statusRef': {'status': 'New'}},
{'statusRef': {'status': '1Unknown'}},
{'statusRef': {'status': 'Accepted'}},
{'statusRef': {'status': 'New'}},
{'statusRef': {'status': 'UltraNew'}},
];
const statusDefs = [
{status: 'UltraNew'}, {status: 'New'}, {status: 'Unused'},
{status: 'Accepted'},
];
const data = extractGridData({issues, extractFieldValuesFromIssue},
{yFieldName: 'Status', extractTypeForFieldName, statusDefs});
const expectedIssues = new Map();
expectedIssues.set(
'All + Accepted', [{'statusRef': {'status': 'Accepted'}}]);
expectedIssues.set(
'All + New',
[{'statusRef': {'status': 'New'}}, {'statusRef': {'status': 'New'}}]);
expectedIssues.set(
'All + UltraNew', [{'statusRef': {'status': 'UltraNew'}}]);
expectedIssues.set(
'All + 1Unknown', [{'statusRef': {'status': '1Unknown'}}]);
assert.deepEqual(data.xHeadings, ['All']);
assert.deepEqual(
data.yHeadings, ['UltraNew', 'New', 'Accepted', '1Unknown']);
assert.deepEqual(data.groupedIssues, expectedIssues);
});
it('extract headings from the Type attribute', () => {
const issues = [
{'labelRefs': [{'label': 'Pri-2'}, {'label': 'Milestone-2000Q1'}]},
{'labelRefs': [{'label': 'Type-Defect'}]},
{'labelRefs': [{'label': 'Type-Defect'}]},
{'labelRefs': [{'label': 'Type-Enhancement'}]},
];
const data = extractGridData({issues, extractFieldValuesFromIssue},
{yFieldName: 'Type'});
const expectedIssues = new Map();
expectedIssues.set('All + Defect', [
{'labelRefs': [{'label': 'Type-Defect'}]},
{'labelRefs': [{'label': 'Type-Defect'}]},
]);
expectedIssues.set('All + Enhancement', [{'labelRefs':
[{'label': 'Type-Enhancement'}]}]);
expectedIssues.set('All + ----', [{'labelRefs':
[{'label': 'Pri-2'}, {'label': 'Milestone-2000Q1'}]}]);
assert.deepEqual(data.xHeadings, ['All']);
assert.deepEqual(data.yHeadings, ['----', 'Defect', 'Enhancement']);
assert.deepEqual(data.groupedIssues, expectedIssues);
});
it('puts predefined labels ahead of ad hoc labels', () => {
const issues = [
{'labelRefs': [{'label': 'Pri-2'}, {'label': 'Type-Defect'}]},
{'labelRefs': [{'label': 'Type-Defect'}]},
{'labelRefs': [{'label': 'Type-Enhancement'}]},
{'labelRefs': [{'label': 'Type-AAA'}]},
];
const labelPrefixValueMap = new Map([
['Pri', new Set(['2'])],
['Type', new Set(['Defect', 'Enhancement'])],
]);
const data = extractGridData({issues, extractFieldValuesFromIssue},
{xFieldName: 'Type', yFieldName: 'Pri', labelPrefixValueMap});
assert.deepEqual(data.xHeadings, ['Defect', 'Enhancement', 'AAA']);
assert.deepEqual(data.yHeadings, ['----', '2']);
});
it('has priority order of predefined, empty, then ad hoc labels', () => {
const issues = [
{'labelRefs': [{'label': 'Pri-2'}, {'label': 'Milestone-2000Q1'}]},
{'labelRefs': [{'label': 'Type-Defect'}]},
{'labelRefs': [{'label': 'Type-Enhancement'}]},
{'labelRefs': [{'label': 'Type-AAA'}]},
];
const labelPrefixValueMap = new Map([
['Pri', new Set(['2'])],
['Type', new Set(['Defect', 'Enhancement'])],
]);
const data = extractGridData({issues, extractFieldValuesFromIssue},
{xFieldName: 'Type', yFieldName: 'Pri', labelPrefixValueMap});
assert.deepEqual(data.xHeadings, ['Defect', 'Enhancement', '----', 'AAA']);
});
});