// main.test /* eslint-env jest */ import { hasProperty, clone, copies, unique, sort, sortBy, pick } from './main.js' describe('test .clone() method:', () => { test(' check if .clone(object) works correctly', () => { const x = { level: 4, IQ: 140, epouse: { name: 'Alice', age: 27, }, birthday: new Date(), a: 0, clone: false, reg: /^\w+@\s([a-z])$/gi, } const y = clone(x) Object.keys(x).forEach((k) => { expect(hasProperty(y, k)).toBeTruthy() }) Object.keys(x.epouse).forEach((k) => { expect(hasProperty(y.epouse, k)).toBeTruthy() expect(y.epouse[k]).toEqual(x.epouse[k]) }) // check immutability y.epouse.age = 25 expect(y.epouse.age).toEqual(25) expect(x.epouse.age).toEqual(27) }) test(' check if .clone(array) works correctly', () => { const x = [ 1, 5, 0, 'a', -10, '-10', '', { a: 1, b: 'Awesome', }, [ 5, 6, 8, { name: 'Lys', age: 11, }, ], ] const y = clone(x) expect(y).toHaveLength(x.length) for (let i = 0; i < x.length; i++) { expect(x[i]).toEqual(y[i]) } // check immutability y[8][3].age = 10 expect(y[8][3].age).toEqual(10) expect(x[8][3].age).toEqual(11) }) }) describe('test .copies() method:', () => { test(' check if .copies(source, dest) works correctly', () => { const source = { name: 'Toto', age: 30, level: 8, nationality: { name: 'America', }, groups: [ 'admin', 'accountant', ], } const dest = { level: 4, IQ: 140, epouse: { name: 'Alice', age: 27, }, nationality: { name: 'Congo', long: '18123.123123.12312', lat: '98984771.134231.1234', }, groups: [ 'finance', 'manager', ], } copies(source, dest) Object.keys(source).forEach((k) => { expect(hasProperty(dest, k)).toBeTruthy() }) expect(dest.nationality.name).toEqual(source.nationality.name) }) test(' check if .copies(source, dest, matched, excepts) works correctly', () => { const source = { name: 'Kiwi', age: 16, gender: 'male', } const dest = { name: 'Aline', age: 20, } copies(source, dest, true, ['age']) expect(hasProperty(dest, 'gender')).toBeFalsy() expect(dest.name).toEqual(source.name) expect(dest.age === source.age).toBeFalsy() }) }) describe('test .unique() method:', () => { test(' check if .unique(array) works correctly', () => { const arr = [1, 1, 2, 2, 3, 4, 5, 5, 6, 3, 5, 4] const uniqArr = unique(arr) expect(uniqArr).toHaveLength(6) }) }) describe('test .sort() method:', () => { test(' check if .sort(array) works correctly', () => { const arr = [6, 4, 8, 2] const sortedArr = sort(arr) expect(sortedArr.join('')).toEqual('2468') }) }) describe('test .sortBy() method:', () => { test(' check if .sortBy(array) works correctly', () => { const arr = [ { age: 5, name: 'E' }, { age: 9, name: 'B' }, { age: 3, name: 'A' }, { age: 12, name: 'D' }, { age: 7, name: 'C' }, ] const sortedByAge = [ { age: 3, name: 'A' }, { age: 5, name: 'E' }, { age: 7, name: 'C' }, { age: 9, name: 'B' }, { age: 12, name: 'D' }, ] const sortedArr = sortBy(arr, 1, 'age') expect(JSON.stringify(sortedArr) === JSON.stringify(sortedByAge)).toBeTruthy() const sortedByNonStringKey = sortBy(arr, 1, 99) expect(JSON.stringify(sortedByNonStringKey) === JSON.stringify(arr)).toBeTruthy() const sortedByNonExistKey = sortBy(arr, 1, 'balance') expect(JSON.stringify(sortedByNonExistKey) === JSON.stringify(arr)).toBeTruthy() }) }) describe('test .pick() method:', () => { test(' check if .pick(array) works correctly', () => { const str = 'abcdefghijklmnopqrstuvwxyz' const arr = str.split('') const uniqChar = pick(arr)[0] expect(str.includes(uniqChar)).toBeTruthy() }) test(' check if .pick(array, count) works correctly', () => { const str = 'abcdefghijklmnopqrstuvwxyz' const arr = str.split('') const picked = pick(arr, 10) expect(picked).toHaveLength(10) }) })