Group same contributions without URL, make grouping more precise
This commit is contained in:
@@ -2,43 +2,94 @@ import { module, test } from 'qunit';
|
||||
import EmberObject from '@ember/object';
|
||||
import contributionGroupingKey from 'kredits-web/utils/contribution-grouping-key';
|
||||
|
||||
function makeContribution (url) {
|
||||
return EmberObject.create({ url });
|
||||
function makeContribution (attrs) {
|
||||
return EmberObject.create(attrs);
|
||||
}
|
||||
|
||||
const baseAttrs = {
|
||||
url: 'https://github.com/67P/kredits-contracts/pull/196',
|
||||
description: 'Chore/dependency updates',
|
||||
date: '2020-05-27',
|
||||
amount: 1500,
|
||||
kind: 'dev'
|
||||
};
|
||||
|
||||
module('Unit | Utils | contribution-grouping-key', function() {
|
||||
|
||||
test('returns the url when present', function(assert) {
|
||||
const c = makeContribution('https://github.com/67P/kredits-contracts/pull/196');
|
||||
assert.equal(contributionGroupingKey(c), 'https://github.com/67P/kredits-contracts/pull/196');
|
||||
test('returns a 6-char hex string when all fields are present', function(assert) {
|
||||
const c = makeContribution(baseAttrs);
|
||||
const key = contributionGroupingKey(c);
|
||||
assert.equal(key.length, 6, '6 chars');
|
||||
assert.ok(/^[0-9a-f]{6}$/.test(key), 'is lowercase hex: ' + key);
|
||||
});
|
||||
|
||||
test('returns the same key for identical github urls', function(assert) {
|
||||
const a = makeContribution('https://github.com/67P/kredits-contracts/pull/196');
|
||||
const b = makeContribution('https://github.com/67P/kredits-contracts/pull/196');
|
||||
test('returns the same key for identical contributions with url', function(assert) {
|
||||
const a = makeContribution(baseAttrs);
|
||||
const b = makeContribution(baseAttrs);
|
||||
assert.equal(contributionGroupingKey(a), contributionGroupingKey(b));
|
||||
});
|
||||
|
||||
test('returns the same key for identical gitea urls', function(assert) {
|
||||
const a = makeContribution('https://gitea.kosmos.org/kredits/kredits-web/issues/231');
|
||||
const b = makeContribution('https://gitea.kosmos.org/kredits/kredits-web/issues/231');
|
||||
test('returns the same key for identical contributions without url', function(assert) {
|
||||
const attrs = { ...baseAttrs, url: null };
|
||||
const a = makeContribution(attrs);
|
||||
const b = makeContribution(attrs);
|
||||
assert.equal(contributionGroupingKey(a), contributionGroupingKey(b));
|
||||
});
|
||||
|
||||
test('returns different keys for different urls', function(assert) {
|
||||
const a = makeContribution('https://github.com/67P/kredits-contracts/pull/196');
|
||||
const b = makeContribution('https://github.com/67P/kredits-contracts/pull/197');
|
||||
test('returns different keys when url differs', function(assert) {
|
||||
const a = makeContribution(baseAttrs);
|
||||
const b = makeContribution({ ...baseAttrs, url: 'https://github.com/67P/kredits-contracts/pull/197' });
|
||||
assert.notEqual(contributionGroupingKey(a), contributionGroupingKey(b));
|
||||
});
|
||||
|
||||
test('returns null when url is empty', function(assert) {
|
||||
const c = makeContribution('');
|
||||
test('returns different keys when amount differs', function(assert) {
|
||||
const a = makeContribution(baseAttrs);
|
||||
const b = makeContribution({ ...baseAttrs, amount: 5000 });
|
||||
assert.notEqual(contributionGroupingKey(a), contributionGroupingKey(b));
|
||||
});
|
||||
|
||||
test('returns different keys when kind differs', function(assert) {
|
||||
const a = makeContribution(baseAttrs);
|
||||
const b = makeContribution({ ...baseAttrs, kind: 'ops' });
|
||||
assert.notEqual(contributionGroupingKey(a), contributionGroupingKey(b));
|
||||
});
|
||||
|
||||
test('returns different keys when description differs', function(assert) {
|
||||
const a = makeContribution(baseAttrs);
|
||||
const b = makeContribution({ ...baseAttrs, description: 'Something else' });
|
||||
assert.notEqual(contributionGroupingKey(a), contributionGroupingKey(b));
|
||||
});
|
||||
|
||||
test('returns different keys when date differs', function(assert) {
|
||||
const a = makeContribution(baseAttrs);
|
||||
const b = makeContribution({ ...baseAttrs, date: '2020-05-28' });
|
||||
assert.notEqual(contributionGroupingKey(a), contributionGroupingKey(b));
|
||||
});
|
||||
|
||||
test('returns different keys for url vs no-url with otherwise identical fields', function(assert) {
|
||||
const withUrl = makeContribution(baseAttrs);
|
||||
const withoutUrl = makeContribution({ ...baseAttrs, url: null });
|
||||
assert.notEqual(contributionGroupingKey(withUrl), contributionGroupingKey(withoutUrl));
|
||||
});
|
||||
|
||||
test('returns null when description is missing', function(assert) {
|
||||
const c = makeContribution({ ...baseAttrs, description: null });
|
||||
assert.equal(contributionGroupingKey(c), null);
|
||||
});
|
||||
|
||||
test('returns null when url is null/undefined', function(assert) {
|
||||
assert.equal(contributionGroupingKey(makeContribution(null)), null);
|
||||
assert.equal(contributionGroupingKey(makeContribution(undefined)), null);
|
||||
test('returns null when date is missing', function(assert) {
|
||||
const c = makeContribution({ ...baseAttrs, date: null });
|
||||
assert.equal(contributionGroupingKey(c), null);
|
||||
});
|
||||
|
||||
test('returns null when amount is missing', function(assert) {
|
||||
const c = makeContribution({ ...baseAttrs, amount: null });
|
||||
assert.equal(contributionGroupingKey(c), null);
|
||||
});
|
||||
|
||||
test('returns null when kind is missing', function(assert) {
|
||||
const c = makeContribution({ ...baseAttrs, kind: null });
|
||||
assert.equal(contributionGroupingKey(c), null);
|
||||
});
|
||||
|
||||
test('returns null when contribution is null/undefined', function(assert) {
|
||||
|
||||
Reference in New Issue
Block a user