ts-prime
Version:
A utility library for JavaScript and Typescript.
61 lines (60 loc) • 2.39 kB
JavaScript
// import { uniq } from './uniq';
import { pipe } from './pipe';
import { createCounter } from './_counter';
import { take } from './take';
import { uniqBy } from './uniqBy';
import { identity } from './identity';
describe('uniqBy', function () {
var people = [
{ name: 'John', age: 42 },
{ name: 'Jörn', age: 30 },
{ name: 'Sarah', age: 33 },
{ name: 'Kim', age: 22 },
{ name: 'Sarah', age: 38 },
{ name: 'John', age: 33 },
{ name: 'Emily', age: 42 },
];
it('handles uniq by identity', function () {
expect(uniqBy([1, 2, 2, 5, 1, 6, 7], identity)).toEqual([1, 2, 5, 6, 7]);
});
it('returns people with uniq names', function () {
expect(uniqBy(people, function (p) { return p.name; })).toEqual([
{ name: 'John', age: 42 },
{ name: 'Jörn', age: 30 },
{ name: 'Sarah', age: 33 },
{ name: 'Kim', age: 22 },
{ name: 'Emily', age: 42 },
]);
});
it('returns people with uniq ages', function () {
expect(uniqBy(people, function (p) { return p.age; })).toEqual([
{ name: 'John', age: 42 },
{ name: 'Jörn', age: 30 },
{ name: 'Sarah', age: 33 },
{ name: 'Kim', age: 22 },
{ name: 'Sarah', age: 38 },
]);
});
it('returns people with uniq first letter of name', function () {
expect(uniqBy(people, function (p) { return p.name.substring(0, 1); })).toEqual([
{ name: 'John', age: 42 },
{ name: 'Sarah', age: 33 },
{ name: 'Kim', age: 22 },
{ name: 'Emily', age: 42 },
]);
});
describe('pipe', function () {
it('gets executed until target length is reached', function () {
var counter = createCounter();
var result = pipe([1, 2, 2, 5, 1, 6, 7], counter.fn(), uniqBy(identity), take(3));
expect(counter.count).toHaveBeenCalledTimes(4);
expect(result).toEqual([1, 2, 5]);
});
it('get executed 3 times when take before uniqBy', function () {
var counter = createCounter();
var result = pipe([1, 2, 2, 5, 1, 6, 7], counter.fn(), take(3), uniqBy(identity));
expect(counter.count).toHaveBeenCalledTimes(3);
expect(result).toEqual([1, 2]);
});
});
});