node-mongo-demo

node.js and mongodb demo

git clone https://9o.is/git/node-mongo-demo.git

lucky7-bet-model.unit.test.js

(2890B)


      1 import Lucky7Bet from '../src/models/lucky7-bet.js';
      2 import { jest } from '@jest/globals';
      3 
      4 describe('Lucky7Bet Model', () => {
      5     it('state pending', () => {
      6         setTime('2024-01-01T00:00:00Z');
      7 
      8         const bet = new Lucky7Bet({
      9             rollAt: new Date('2024-01-01T00:00:01Z'),
     10         });
     11 
     12         expect(bet.state).toBe('pending');
     13     });
     14 
     15     it('state finished', () => {
     16         setTime('2024-01-01T00:00:01Z');
     17 
     18         const bet = new Lucky7Bet({
     19             rollAt: new Date('2024-01-01T00:00:01Z'),
     20         });
     21 
     22         expect(bet.state).toBe('finished');
     23     });
     24 
     25     it('won lucky', () => {
     26         const bet = new Lucky7Bet({
     27             roll: [3,4],
     28             lucky: true,
     29         });
     30 
     31         expect(bet.win).toBe(true);
     32     });
     33 
     34     it('won unlucky', () => {
     35         const bet = new Lucky7Bet({
     36             roll: [1,1],
     37             lucky: false,
     38         });
     39 
     40         expect(bet.win).toBe(true);
     41     });
     42 
     43     it('lost lucky', () => {
     44         const bet = new Lucky7Bet({
     45             roll: [1,1],
     46             lucky: true,
     47         });
     48 
     49         expect(bet.win).toBe(false);
     50     });
     51 
     52     it('lost unlucky', () => {
     53         const bet = new Lucky7Bet({
     54             roll: [3,4],
     55             lucky: false,
     56         });
     57 
     58         expect(bet.win).toBe(false);
     59     });
     60 
     61     it('played() false', () => {
     62         const bet = new Lucky7Bet();
     63         expect(bet.played()).toBe(false);
     64     });
     65 
     66     it('played() true', () => {
     67         const bet = new Lucky7Bet();
     68         bet.play();
     69         expect(bet.played()).toBe(true);
     70     });
     71 
     72     it('toRedactedObject() pending', () => {
     73         setTime('2024-01-01T00:00:00Z');
     74 
     75         const bet = new Lucky7Bet(createProps({
     76             rollAt: new Date('2024-01-01T01:00:00Z'),
     77         }));
     78         const obj = bet.toRedactedObject();
     79 
     80         expect(Object.keys(obj).length).toBe(6);
     81         expect(obj.id).toBeDefined();
     82         expect(obj.rollAt).toBeDefined();
     83         expect(obj.lucky).toBeDefined();
     84         expect(obj.state).toBeDefined();
     85         expect(obj.roll).toBeUndefined();
     86         expect(obj.win).toBeUndefined();
     87     });
     88 
     89     it('toRedactedObject() finished', () => {
     90         setTime('2024-01-01T00:00:00Z');
     91 
     92         const bet = new Lucky7Bet(createProps({
     93             rollAt: new Date('2024-01-01T00:00:00Z'),
     94         }));
     95         const obj = bet.toRedactedObject();
     96 
     97         expect(Object.keys(obj)).toHaveLength(6);
     98         expect(obj.id).toBeDefined();
     99         expect(obj.rollAt).toBeDefined();
    100         expect(obj.lucky).toBeDefined();
    101         expect(obj.state).toBeDefined();
    102         expect(obj.roll).toBeDefined();
    103         expect(obj.win).toBeDefined();
    104     });
    105 });
    106 
    107 function createProps(props) {
    108     return {
    109         rollAt: new Date('2024-01-01T00:00:00Z'),
    110         lucky: true,
    111         roll: [3,4],
    112         ...props,
    113     };
    114 }
    115 
    116 function setTime(dt) {
    117     jest.useFakeTimers().setSystemTime(new Date(dt));
    118 }