@@ -6,12 +6,14 @@ import {
6
6
} from '@angular/core/testing' ;
7
7
import { QueryService } from './query.service' ;
8
8
import { BackendService } from '../shared/backend.service' ;
9
- import { Observable , Observer } from 'rxjs' ;
9
+ import { Observable , Observer , BehaviorSubject } from 'rxjs' ;
10
+ import { User } from '../shared/user' ;
11
+ import { AuthService } from '../auth/auth.service' ;
10
12
11
13
12
14
class MockBackendService {
13
15
14
- request ( path : string , data : any ) {
16
+ request ( path : string , data : any , use_auth : boolean ) {
15
17
return Observable . create (
16
18
( observer : Observer < any > ) => {
17
19
observer . next ( null ) ;
@@ -21,25 +23,47 @@ class MockBackendService {
21
23
}
22
24
}
23
25
26
+ class MockAuthService {
27
+
28
+ private user = new BehaviorSubject < User > ( null ) ;
29
+ // Observable string streams
30
+ // user$ = this.user.asObservable();
31
+
32
+ login ( ) {
33
+ this . user . next ( new User ( new User ( { uid : '123abc' , email : 'fake.test@example.com' , loggedIn : true } ) ) ) ;
34
+ }
35
+
36
+ logout ( ) {
37
+ this . user . next ( new User ) ;
38
+ }
39
+
40
+ getUser ( ) {
41
+ return this . user ;
42
+ }
43
+
44
+ }
45
+
24
46
describe ( 'QueryService' , ( ) => {
25
47
beforeEach ( ( ) => {
26
48
addProviders ( [
27
49
QueryService ,
50
+ { provide : AuthService , useClass : MockAuthService } ,
28
51
{ provide : BackendService , useClass : MockBackendService }
29
52
] ) ;
30
53
} ) ;
31
54
32
- it ( 'should call backend path with query and source as data.' , async ( inject (
55
+ it ( 'should call backend path with query, source and authentication as data.' , async ( inject (
33
56
// Note that we pass XHRBackend, NOT MockBackend.
34
- [ QueryService , BackendService ] , ( queryService : QueryService , backend : MockBackendService ) => {
57
+ [ QueryService , AuthService , BackendService ] , ( queryService : QueryService , auth : MockAuthService , backend : MockBackendService ) => {
35
58
36
59
let query = 'asdf' ;
37
60
let source = 'test' ;
38
61
39
62
spyOn ( backend , 'request' ) . and . callThrough ( ) ;
40
63
64
+ auth . login ( ) ;
41
65
queryService . doQuery ( 'asdf' , 'test' ) . subscribe ( data => {
42
- expect ( backend . request ) . toHaveBeenCalledWith ( '/api/q' , { q : query , source : source } ) ;
66
+ expect ( backend . request ) . toHaveBeenCalledWith ( '/api/q' , { q : query , source : source } , true ) ;
43
67
} ,
44
68
err => {
45
69
throw new Error ( 'Query failed' ) ;
@@ -48,6 +72,65 @@ describe('QueryService', () => {
48
72
49
73
}
50
74
) ) ) ;
75
+ it ( 'should use an un-authenticated request if the user is logged out.' , async ( inject (
76
+ // Note that we pass XHRBackend, NOT MockBackend.
77
+ [ QueryService , AuthService , BackendService ] , ( queryService : QueryService , auth : MockAuthService , backend : MockBackendService ) => {
78
+
79
+ let query = 'asdf' ;
80
+ let source = 'test' ;
81
+
82
+ spyOn ( backend , 'request' ) . and . callThrough ( ) ;
83
+ auth . logout ( ) ;
84
+
85
+ queryService . doQuery ( 'asdf' , 'test' ) . subscribe ( data => {
86
+ expect ( backend . request ) . toHaveBeenCalledWith ( '/api/q' , { q : query , source : source } , false ) ;
87
+ } ,
88
+ err => {
89
+ throw new Error ( 'Query failed' ) ;
90
+ }
91
+ ) ;
92
+
93
+ }
94
+ ) ) ) ;
95
+ it ( 'should use an authenticated request if the user is logged in.' , async ( inject (
96
+ // Note that we pass XHRBackend, NOT MockBackend.
97
+ [ QueryService , AuthService , BackendService ] , ( queryService : QueryService , auth : MockAuthService , backend : MockBackendService ) => {
98
+
99
+ let query = 'asdf' ;
100
+ let source = 'test' ;
101
+
102
+ spyOn ( backend , 'request' ) . and . callThrough ( ) ;
103
+ auth . login ( ) ;
104
+
105
+ queryService . doQuery ( 'asdf' , 'test' ) . subscribe ( data => {
106
+ expect ( backend . request ) . toHaveBeenCalledWith ( '/api/q' , { q : query , source : source } , true ) ;
107
+ } ,
108
+ err => {
109
+ throw new Error ( 'Query failed' ) ;
110
+ }
111
+ ) ;
112
+
113
+ }
114
+ ) ) ) ;
115
+ it ( 'should not make any request if the user is null.' , async ( inject (
116
+ // Note that we pass XHRBackend, NOT MockBackend.
117
+ [ QueryService , AuthService , BackendService ] , ( queryService : QueryService , auth : MockAuthService , backend : MockBackendService ) => {
118
+
119
+ spyOn ( backend , 'request' ) . and . callThrough ( ) ;
120
+
121
+ // We don't login or logout, so the user should be null.
122
+
123
+ queryService . doQuery ( 'asdf' , 'test' ) . subscribe ( data => {
124
+ expect ( backend . request ) . not . toHaveBeenCalled ( ) ;
125
+ } ,
126
+ err => {
127
+ throw new Error ( 'Query failed' ) ;
128
+ }
129
+ ) ;
130
+
131
+ }
132
+ ) ) ) ;
133
+
51
134
describe ( 'getQueries()' , ( ) => {
52
135
53
136
it ( 'should call backend.request() just the /api/report path and an empty object.' , async ( inject (
0 commit comments