Socialify

Folder ..

Viewing git.spec.ts
152 lines (124 loc) • 4.5 KB

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
import type { JestMockCompat } from 'vitest';
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
import { faker } from '../dist/cjs';

describe('git.js', () => {
  describe('branch()', () => {
    let spy_hacker_noun: JestMockCompat<[], string>;
    let spy_hacker_verb: JestMockCompat<[], string>;

    beforeEach(() => {
      spy_hacker_noun = vi.spyOn(faker.hacker, 'noun');
      spy_hacker_verb = vi.spyOn(faker.hacker, 'verb');
    });

    afterEach(() => {
      spy_hacker_noun.mockRestore();
      spy_hacker_verb.mockRestore();
    });

    it('returns a branch with hacker noun and verb', () => {
      faker.git.branch();

      expect(spy_hacker_noun).toHaveBeenCalledOnce();
      expect(spy_hacker_verb).toHaveBeenCalledOnce();
    });
  });

  describe('commitEntry()', () => {
    let spy_git_commitMessage: JestMockCompat<[], string>;
    let spy_git_commitSha: JestMockCompat<[], string>;
    let spy_internet_email: JestMockCompat<
      [firstName?: string, lastName?: string, provider?: string],
      string
    >;
    let spy_name_firstName: JestMockCompat<[gender?: string | number], string>;
    let spy_name_lastName: JestMockCompat<[gender?: string | number], string>;
    let spy_datatype_number: JestMockCompat<
      [
        options?:
          | number
          | {
              min?: number;
              max?: number;
              precision?: number;
            }
      ],
      number
    >;

    beforeEach(() => {
      spy_git_commitMessage = vi.spyOn(faker.git, 'commitMessage');
      spy_git_commitSha = vi.spyOn(faker.git, 'commitSha');
      spy_internet_email = vi.spyOn(faker.internet, 'email');
      spy_name_firstName = vi.spyOn(faker.name, 'firstName');
      spy_name_lastName = vi.spyOn(faker.name, 'lastName');
      spy_datatype_number = vi.spyOn(faker.datatype, 'number');
    });

    afterEach(() => {
      spy_git_commitMessage.mockRestore();
      spy_git_commitSha.mockRestore();
      spy_internet_email.mockRestore();
      spy_name_firstName.mockRestore();
      spy_name_lastName.mockRestore();
      spy_datatype_number.mockRestore();
    });

    it('returns merge entry at random', () => {
      faker.git.commitEntry();

      expect(spy_datatype_number).toHaveBeenCalled();
    });

    it('returns a commit entry with git commit message and sha', () => {
      faker.git.commitEntry();

      expect(spy_git_commitMessage).toHaveBeenCalledOnce();
      expect(spy_git_commitSha).toHaveBeenCalledOnce();
    });

    it('returns a commit entry with internet email', () => {
      faker.git.commitEntry();

      expect(spy_internet_email).toHaveBeenCalledOnce();
    });

    it('returns a commit entry with name first and last', () => {
      faker.git.commitEntry();

      expect(spy_name_firstName).toHaveBeenCalledTimes(2);
      expect(spy_name_lastName).toHaveBeenCalledTimes(2);
    });

    describe("with options['merge'] equal to true", () => {
      let spy_git_shortSha: JestMockCompat<[], string>;

      beforeEach(() => {
        spy_git_shortSha = vi.spyOn(faker.git, 'shortSha');
      });

      afterEach(() => {
        spy_git_shortSha.mockRestore();
      });

      it('returns a commit entry with merge details', () => {
        faker.git.commitEntry({ merge: true });

        expect(spy_git_shortSha).toHaveBeenCalledTimes(2);
      });
    });
  });

  describe('commitMessage()', () => {
    let spy_hacker_verb: JestMockCompat<[], string>;
    let spy_hacker_adjective: JestMockCompat<[], string>;
    let spy_hacker_noun: JestMockCompat<[], string>;

    beforeEach(() => {
      spy_hacker_verb = vi.spyOn(faker.hacker, 'verb');
      spy_hacker_adjective = vi.spyOn(faker.hacker, 'adjective');
      spy_hacker_noun = vi.spyOn(faker.hacker, 'noun');
    });

    afterEach(() => {
      spy_hacker_verb.mockRestore();
      spy_hacker_adjective.mockRestore();
      spy_hacker_noun.mockRestore();
    });

    it('returns a commit message with hacker noun, adj and verb', () => {
      faker.git.commitMessage();

      expect(spy_hacker_verb).toHaveBeenCalledOnce();
      expect(spy_hacker_adjective).toHaveBeenCalledOnce();
      expect(spy_hacker_noun).toHaveBeenCalledOnce();
    });
  });

  describe('commitSha()', () => {
    it('returns a random commit SHA', () => {
      const commitSha = faker.git.commitSha();
      expect(commitSha).match(/^[a-f0-9]{40}$/);
    });
  });

  describe('shortSha()', () => {
    it('returns a random short SHA', () => {
      const shortSha = faker.git.shortSha();
      expect(shortSha).match(/^[a-f0-9]{7}$/);
    });
  });
});