summaryrefslogtreecommitdiff
path: root/spec/javascripts/graphs/stat_graph_contributors_util_spec.js
blob: 02d1ca1cc3b4137415f4bc1f714afe4da681879a (plain)
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
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
/* eslint-disable no-var, camelcase, vars-on-top */

import ContributorsStatGraphUtil from '~/pages/projects/graphs/show/stat_graph_contributors_util';

describe("ContributorsStatGraphUtil", function () {
  describe("#parse_log", function () {
    it("returns a correctly parsed log", function () {
      var fake_log = [
        { author_email: "karlo@email.com", author_name: "Karlo Soriano", date: "2013-05-09", additions: 471 },
        { author_email: "dzaporozhets@email.com", author_name: "Dmitriy Zaporozhets", date: "2013-05-08", additions: 6, deletions: 1 },
        { author_email: "dzaporozhets@email.com", author_name: "Dmitriy Zaporozhets", date: "2013-05-08", additions: 19, deletions: 3 },
        { author_email: "dzaporozhets@email.com", author_name: "Dmitriy Zaporozhets", date: "2013-05-08", additions: 29, deletions: 3 }
      ];

      var correct_parsed_log = {
        total: [
          { date: "2013-05-09", additions: 471, deletions: 0, commits: 1 },
          { date: "2013-05-08", additions: 54, deletions: 7, commits: 3 }
        ],
        by_author: [
          {
            author_name: "Karlo Soriano", author_email: "karlo@email.com",
            "2013-05-09": { date: "2013-05-09", additions: 471, deletions: 0, commits: 1 }
          },
          {
            author_name: "Dmitriy Zaporozhets", author_email: "dzaporozhets@email.com",
            "2013-05-08": { date: "2013-05-08", additions: 54, deletions: 7, commits: 3 }
          }
        ]
      };
      expect(ContributorsStatGraphUtil.parse_log(fake_log)).toEqual(correct_parsed_log);
    });
  });

  describe("#store_data", function () {
    var fake_entry = { author: "Karlo Soriano", date: "2013-05-09", additions: 471 };
    var fake_total = {};
    var fake_by_author = {};

    it("calls #store_commits", function () {
      spyOn(ContributorsStatGraphUtil, 'store_commits');
      ContributorsStatGraphUtil.store_data(fake_entry, fake_total, fake_by_author);
      expect(ContributorsStatGraphUtil.store_commits).toHaveBeenCalled();
    });

    it("calls #store_additions", function () {
      spyOn(ContributorsStatGraphUtil, 'store_additions');
      ContributorsStatGraphUtil.store_data(fake_entry, fake_total, fake_by_author);
      expect(ContributorsStatGraphUtil.store_additions).toHaveBeenCalled();
    });

    it("calls #store_deletions", function () {
      spyOn(ContributorsStatGraphUtil, 'store_deletions');
      ContributorsStatGraphUtil.store_data(fake_entry, fake_total, fake_by_author);
      expect(ContributorsStatGraphUtil.store_deletions).toHaveBeenCalled();
    });
  });

  // TODO: fix or remove
  // describe("#store_commits", function () {
  //   var fake_total = "fake_total";
  //   var fake_by_author = "fake_by_author";
  //
  //   it("calls #add twice with arguments fake_total and fake_by_author respectively", function () {
  //     spyOn(ContributorsStatGraphUtil, 'add');
  //     ContributorsStatGraphUtil.store_commits(fake_total, fake_by_author);
  //     expect(ContributorsStatGraphUtil.add.argsForCall).toEqual([["fake_total", "commits", 1], ["fake_by_author", "commits", 1]]);
  //   });
  // });

  describe("#add", function () {
    it("adds 1 to current test_field in collection", function () {
      var fake_collection = { test_field: 10 };
      ContributorsStatGraphUtil.add(fake_collection, "test_field", 1);
      expect(fake_collection.test_field).toEqual(11);
    });

    it("inits and adds 1 if test_field in collection is not defined", function () {
      var fake_collection = {};
      ContributorsStatGraphUtil.add(fake_collection, "test_field", 1);
      expect(fake_collection.test_field).toEqual(1);
    });
  });

  // TODO: fix or remove
  // describe("#store_additions", function () {
  //   var fake_entry = {additions: 10};
  //   var fake_total= "fake_total";
  //   var fake_by_author = "fake_by_author";
  //   it("calls #add twice with arguments fake_total and fake_by_author respectively", function () {
  //     spyOn(ContributorsStatGraphUtil, 'add');
  //     ContributorsStatGraphUtil.store_additions(fake_entry, fake_total, fake_by_author);
  //     expect(ContributorsStatGraphUtil.add.argsForCall).toEqual([["fake_total", "additions", 10], ["fake_by_author", "additions", 10]]);
  //   });
  // });

  // TODO: fix or remove
  // describe("#store_deletions", function () {
  //   var fake_entry = {deletions: 10};
  //   var fake_total= "fake_total";
  //   var fake_by_author = "fake_by_author";
  //   it("calls #add twice with arguments fake_total and fake_by_author respectively", function () {
  //     spyOn(ContributorsStatGraphUtil, 'add');
  //     ContributorsStatGraphUtil.store_deletions(fake_entry, fake_total, fake_by_author);
  //     expect(ContributorsStatGraphUtil.add.argsForCall).toEqual([["fake_total", "deletions", 10], ["fake_by_author", "deletions", 10]]);
  //   });
  // });

  describe("#add_date", function () {
    it("adds a date field to the collection", function () {
      var fake_date = "2013-10-02";
      var fake_collection = {};
      ContributorsStatGraphUtil.add_date(fake_date, fake_collection);
      expect(fake_collection[fake_date].date).toEqual("2013-10-02");
    });
  });

  describe("#add_author", function () {
    it("adds an author field to the collection", function () {
      var fake_author = { author_name: "Author", author_email: 'fake@email.com' };
      var fake_author_collection = {};
      var fake_email_collection = {};
      ContributorsStatGraphUtil.add_author(fake_author, fake_author_collection, fake_email_collection);
      expect(fake_author_collection[fake_author.author_name].author_name).toEqual("Author");
      expect(fake_email_collection[fake_author.author_email].author_name).toEqual("Author");
    });
  });

  describe("#get_total_data", function () {
    it("returns the collection sorted via specified field", function () {
      var fake_parsed_log = {
        total: [
          { date: "2013-05-09", additions: 471, deletions: 0, commits: 1 },
          { date: "2013-05-08", additions: 54, deletions: 7, commits: 3 }
        ],
        by_author: [
          {
            author: "Karlo Soriano",
            "2013-05-09": { date: "2013-05-09", additions: 471, deletions: 0, commits: 1 }
          },
          {
            author: "Dmitriy Zaporozhets",
            "2013-05-08": { date: "2013-05-08", additions: 54, deletions: 7, commits: 3 }
          }
        ]
      };
      var correct_total_data = [
        { date: "2013-05-08", commits: 3 },
        { date: "2013-05-09", commits: 1 }
      ];
      expect(ContributorsStatGraphUtil.get_total_data(fake_parsed_log, "commits")).toEqual(correct_total_data);
    });
  });

  describe("#pick_field", function () {
    it("returns the collection with only the specified field and date", function () {
      var fake_parsed_log_total = [
        { date: "2013-05-09", additions: 471, deletions: 0, commits: 1 },
        { date: "2013-05-08", additions: 54, deletions: 7, commits: 3 }
      ];
      ContributorsStatGraphUtil.pick_field(fake_parsed_log_total, "commits");
      var correct_pick_field_data = [{ date: "2013-05-09", commits: 1 }, { date: "2013-05-08", commits: 3 }];
      expect(ContributorsStatGraphUtil.pick_field(fake_parsed_log_total, "commits")).toEqual(correct_pick_field_data);
    });
  });

  describe("#get_author_data", function () {
    it("returns the log by author sorted by specified field", function () {
      var fake_parsed_log = {
        total: [
          { date: "2013-05-09", additions: 471, deletions: 0, commits: 1 },
          { date: "2013-05-08", additions: 54, deletions: 7, commits: 3 }
        ],
        by_author: [
          {
            author_name: "Karlo Soriano", author_email: "karlo@email.com",
            "2013-05-09": { date: "2013-05-09", additions: 471, deletions: 0, commits: 1 }
          },
          {
            author_name: "Dmitriy Zaporozhets", author_email: "dzaporozhets@email.com",
            "2013-05-08": { date: "2013-05-08", additions: 54, deletions: 7, commits: 3 }
          }
        ]
      };
      var correct_author_data = [
        { author_name: "Dmitriy Zaporozhets", author_email: "dzaporozhets@email.com", dates: { "2013-05-08": 3 }, deletions: 7, additions: 54, "commits": 3 },
        { author_name: "Karlo Soriano", author_email: "karlo@email.com", dates: { "2013-05-09": 1 }, deletions: 0, additions: 471, commits: 1 }
      ];
      expect(ContributorsStatGraphUtil.get_author_data(fake_parsed_log, "commits")).toEqual(correct_author_data);
    });
  });

  describe("#parse_log_entry", function () {
    it("adds the corresponding info from the log entry to the author", function () {
      var fake_log_entry = { author_name: "Karlo Soriano", author_email: "karlo@email.com",
        "2013-05-09": { date: "2013-05-09", additions: 471, deletions: 0, commits: 1 }
      };
      var correct_parsed_log = { author_name: "Karlo Soriano", author_email: "karlo@email.com", dates: { "2013-05-09": 1 }, deletions: 0, additions: 471, commits: 1 };
      expect(ContributorsStatGraphUtil.parse_log_entry(fake_log_entry, 'commits', null)).toEqual(correct_parsed_log);
    });
  });

  describe("#in_range", function () {
    var date = "2013-05-09";
    it("returns true if date_range is null", function () {
      expect(ContributorsStatGraphUtil.in_range(date, null)).toEqual(true);
    });
    it("returns true if date is in range", function () {
      var date_range = [new Date("2013-01-01"), new Date("2013-12-12")];
      expect(ContributorsStatGraphUtil.in_range(date, date_range)).toEqual(true);
    });
    it("returns false if date is not in range", function () {
      var date_range = [new Date("1999-12-01"), new Date("2000-12-01")];
      expect(ContributorsStatGraphUtil.in_range(date, date_range)).toEqual(false);
    });
  });
});