Files
kredits-web/tests/unit/utils/contribution-grouping-key-test.js
T
raucao 33a429c448
CI / Lint (pull_request) Successful in 51s
CI / Test (pull_request) Successful in 1m33s
Group same contributions without URL, make grouping more precise
2026-07-26 17:22:53 +02:00

100 lines
3.9 KiB
JavaScript

import { module, test } from 'qunit';
import EmberObject from '@ember/object';
import contributionGroupingKey from 'kredits-web/utils/contribution-grouping-key';
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 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 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 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 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 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 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) {
assert.equal(contributionGroupingKey(null), null);
assert.equal(contributionGroupingKey(undefined), null);
});
});