1
+ package com .dockerx .rxreact .services ;
2
+
3
+ import com .dockerx .rxreact .domain .*;
4
+ import com .dockerx .rxreact .repository .GitHbubRepos ;
5
+ import io .reactivex .subscribers .TestSubscriber ;
6
+ import org .junit .Before ;
7
+ import org .junit .Test ;
8
+ import org .junit .runner .RunWith ;
9
+ import org .mockito .Mock ;
10
+ import org .springframework .test .context .junit4 .SpringJUnit4ClassRunner ;
11
+
12
+ import java .time .LocalDateTime ;
13
+ import java .util .Arrays ;
14
+ import java .util .List ;
15
+
16
+ import static org .assertj .core .api .Assertions .assertThat ;
17
+ import static org .mockito .ArgumentMatchers .anyString ;
18
+ import static org .mockito .Mockito .when ;
19
+ import static org .mockito .MockitoAnnotations .initMocks ;
20
+
21
+ /**
22
+ * @author Author 知秋
23
+ * @email fei6751803@163.com
24
+ * @time Created by Auser on 2018年4月26日 18:02.
25
+ */
26
+ @ RunWith (SpringJUnit4ClassRunner .class )
27
+ public class GitHubServiceImplTest {
28
+
29
+ @ Mock
30
+ private GitHbubRepos gitHbubRepos ;
31
+ private GitHubService gitHubService ;
32
+
33
+ @ Before
34
+ public void setup () {
35
+ initMocks (this );
36
+ gitHubService =new GitHubServiceImpl (gitHbubRepos );
37
+ when (gitHbubRepos .getRepos (anyString ())).thenAnswer (m ->getReposForTest ());
38
+
39
+ when (gitHbubRepos .getCommitsInWeek (anyString (), anyString ())).thenAnswer (m -> getCommitsInWeekForTest ());
40
+ when (gitHbubRepos .getSingleCommit (anyString (), anyString (), anyString ())).thenAnswer (m -> getSingleCommitForTest ());
41
+ when (gitHbubRepos .getSingleCommitByUrl (anyString ())).thenAnswer (m -> getSingleCommitForTest ());
42
+ }
43
+
44
+ private List <Repository > getReposForTest () {
45
+ try {
46
+ Thread .sleep (1000 );
47
+ } catch (InterruptedException ignore ) {
48
+ }
49
+ return Arrays .asList (
50
+ new Repository ("repo1" , LocalDateTime .now ().minusMonths (1 )),
51
+ new Repository ("repo2" , LocalDateTime .now ()),
52
+ new Repository ("repo3" , LocalDateTime .now ().minusDays (3 ))
53
+ );
54
+ }
55
+ @ Test
56
+ public void getRepos () {
57
+ TestSubscriber <String > testSubscriber = new TestSubscriber <>();
58
+
59
+
60
+ gitHubService .getRepos ("test-user" )
61
+ .subscribe (testSubscriber );
62
+
63
+ testSubscriber .assertNoErrors ();
64
+ assertThat (testSubscriber .values ())
65
+ .as ("getRepos returns all user code repository " )
66
+ .containsExactly ("repo1 " ,"repo2 " , "repo3 " );
67
+ }
68
+
69
+ @ Test
70
+ public void getReposInWeek () {
71
+ TestSubscriber <String > testSubscriber = new TestSubscriber <>();
72
+
73
+ gitHubService .getReposInWeek ("test-user" )
74
+ .subscribe (testSubscriber );
75
+
76
+ testSubscriber .assertNoErrors ();
77
+ assertThat (testSubscriber .values ())
78
+ .as ("getReposInWeek returns updated repos within one week" )
79
+ .containsExactly ("repo2 " , "repo3 " );
80
+ }
81
+
82
+ @ Test
83
+ public void getCommitsInWeek () {
84
+ TestSubscriber <Commit > testSubscriber = new TestSubscriber <>();
85
+
86
+ gitHubService .getCommitsInWeek ("test-user" , "test-repo" )
87
+ .subscribe (testSubscriber );
88
+
89
+ testSubscriber .assertNoErrors ();
90
+ assertThat (testSubscriber .values ())
91
+ .as ("getCommitsInWeek returns commits updated by `user` within one week" )
92
+ .extracting (Commit ::getSha )
93
+ .containsExactly ("sha1" );
94
+ }
95
+
96
+
97
+
98
+ @ Test
99
+ public void getCommittedFilesByUser () {
100
+ TestSubscriber <CommittedFile > testSubscriber = new TestSubscriber <>();
101
+
102
+ gitHubService .getCommittedFilesByUser ("test-user" )
103
+ .subscribe (testSubscriber );
104
+
105
+ testSubscriber .assertNoErrors ();
106
+ assertThat (testSubscriber .values ())
107
+ .as ("getCommittedFilesByUser returns CommittedFiles by `user`" )
108
+ .extracting (CommittedFile ::getFilename )
109
+ .containsOnly ("filename1" , "filename1" , "filename2" , "filename2" );
110
+ }
111
+
112
+ private List <Commit > getCommitsInWeekForTest () {
113
+ try {
114
+ Thread .sleep (300 );
115
+ } catch (InterruptedException ignore ) {
116
+ }
117
+ return Arrays .asList (
118
+ Commit .builder ()
119
+ .sha ("sha1" )
120
+ .committer (new Committer ("test-user" ,"https://github.com/muyinchen" ,"https://api.github.com/users/muyinchen/orgs" ))
121
+ .author (new Author ("url2" ,"https://github.com/muyinchen" ,true ,"https://api.github.com/users/muyinchen/orgs" ))
122
+ .build (),
123
+ Commit .builder ()
124
+ .sha ("sha2" )
125
+ .committer (new Committer ("no-test-user" ,"https://github.com/muyinchen/no-test-user" ,"https://api.github.com/users/muyinchen/orgs/no-test-user" ))
126
+ .author (new Author ("url2" ,"https://github.com/muyinchen/no-test-user" ,true ,"https://api.github.com/users/muyinchen/orgs/no-test-user" ))
127
+ .build ()
128
+ );
129
+ }
130
+
131
+ private SingleCommit getSingleCommitForTest () {
132
+ try {
133
+ Thread .sleep (300 );
134
+ } catch (InterruptedException ignore ) {
135
+ }
136
+ return new SingleCommit (
137
+ Arrays .asList (
138
+ new CommittedFile ("filename1" , 10 ),
139
+ new CommittedFile ("filename2" , 20 )
140
+ )
141
+ );
142
+ }
143
+ }
0 commit comments