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); }); });