Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Avatar for KuCalc : devops.
Download
50655 views
1
###
2
Testing API functions relating to users and user accounts
3
4
COPYRIGHT : (c) 2017 SageMath, Inc.
5
LICENSE : AGPLv3
6
###
7
8
api = require('./apitest')
9
{setup, teardown} = api
10
11
misc = require('smc-util/misc')
12
13
expect = require('expect')
14
15
describe 'testing calls relating to creating user accounts -- ', ->
16
before(setup)
17
after(teardown)
18
19
it "gets names for empty list of users", (done) ->
20
api.call
21
event : 'get_usernames'
22
body :
23
account_ids : []
24
cb : (err, resp) ->
25
expect(err).toEqual(null)
26
expect(resp?.event).toBe('usernames')
27
expect(resp?.usernames).toEqual({})
28
done(err)
29
30
it "gets names for api test account", (done) ->
31
api.call
32
event : 'get_usernames'
33
body :
34
account_ids : [api.account_id]
35
cb : (err, resp) ->
36
expect(resp?.event).toBe('usernames')
37
expect(resp?.usernames).toEqual
38
"#{api.account_id}":
39
first_name: 'Sage'
40
last_name: 'CoCalc'
41
done(err)
42
43
account_id2 = undefined
44
it "uses api call to create a second account", (done) ->
45
api.call
46
event : 'create_account'
47
body :
48
first_name : "Sage2"
49
last_name : "CoCalc2"
50
email_address : "[email protected]"
51
password : "1234qwerty"
52
agreed_to_terms : true
53
cb : (err, resp) ->
54
expect(resp?.event).toBe('account_created')
55
expect(misc.is_valid_uuid_string(resp?.account_id)).toBe(true)
56
account_id2 = resp?.account_id
57
done(err)
58
59
it "tries to create the same account again", (done) ->
60
api.call
61
event : 'create_account'
62
body :
63
first_name : "Sage2"
64
last_name : "CoCalc2"
65
email_address : "[email protected]"
66
password : "1234qwerty"
67
agreed_to_terms : true
68
cb : (err, resp) ->
69
expect(resp?.event).toBe('account_creation_failed')
70
expect(resp?.reason).toEqual({"email_address":"This e-mail address is already taken."})
71
done(err)
72
73
project_id = undefined
74
it "creates test project", (done) ->
75
api.call
76
event : 'create_project'
77
body :
78
title : 'COLLABTEST'
79
description : 'Testing collaboration ops'
80
cb : (err, resp) ->
81
expect(resp?.event).toBe('project_created')
82
project_id = resp.project_id
83
done(err)
84
85
it "invites collaborator to project", (done) ->
86
api.call
87
event : 'invite_collaborator'
88
body :
89
account_id : account_id2
90
project_id : project_id
91
cb : (err, resp) ->
92
expect(resp?.event).toBe('success')
93
done(err)
94
95
it "lists project collaborators", (done) ->
96
api.call
97
event : 'query'
98
body :
99
query : {projects:{project_id:project_id, users:null}}
100
cb : (err, resp) ->
101
expect(resp?.event).toBe('query')
102
expect(resp?.query?.projects?.users[account_id2]).toEqual( group: 'collaborator' )
103
done(err)
104
105
base_url = 'https://cocalc.com'
106
it "invites non-cloud collaborators", (done) ->
107
# TODO: this test cannot check contents of the email message sent,
108
# because api.last_email isn't set until after this test runs.
109
# See TODO in smc-hub/client.coffee around L1216, where cb() is called before
110
# email is sent.
111
api.call
112
event : 'invite_noncloud_collaborators'
113
body :
114
project_id : project_id
115
to : '[email protected]'
116
email : 'Plese sign up and join this project.'
117
title : 'Team Project'
118
link2proj : "#{base_url}/projects/#{project_id}"
119
cb : ->
120
#expect(resp?.event).toBe('invite_noncloud_collaborators_resp')
121
#expect(api.last_email?.subject).toBe('CoCalc Invitation')
122
done()
123
124
125
it "removes collaborator", (done) ->
126
api.call
127
event : 'remove_collaborator'
128
body :
129
account_id : account_id2
130
project_id : project_id
131
cb : (err, resp) ->
132
expect(resp?.event).toBe('success')
133
done(err)
134
135
it "deletes the second account", (done) ->
136
api.call
137
event : 'delete_account'
138
body :
139
account_id : account_id2
140
cb : (err, resp) ->
141
expect(resp?.event).toBe('account_deleted')
142
done(err)
143
144
describe 'testing invalid input to creating user accounts -- ', ->
145
before(setup)
146
after(teardown)
147
148
it "leaves off the first name", (done) ->
149
api.call
150
event : 'create_account'
151
body :
152
last_name : "CoCalc3"
153
email_address : "[email protected]"
154
password : "god"
155
agreed_to_terms : true
156
cb : (err, resp) ->
157
expect(misc.startswith(err, 'invalid parameters')).toBe(true)
158
done()
159
160
it "leaves first name blank", (done) ->
161
api.call
162
event : 'create_account'
163
body :
164
first_name : ""
165
last_name : "xxxx"
166
email_address : "[email protected]"
167
password : "xyz123"
168
agreed_to_terms : true
169
cb : (err, resp) ->
170
delete resp?.id
171
expect(resp).toEqual(event:'account_creation_failed', reason: { first_name: 'Enter your first name.' })
172
done(err)
173
174
it "leaves last name blank", (done) ->
175
api.call
176
event : 'create_account'
177
body :
178
first_name : "C"
179
last_name : ""
180
email_address : "[email protected]"
181
password : "xyz123"
182
agreed_to_terms : true
183
cb : (err, resp) ->
184
delete resp?.id
185
expect(resp).toEqual(event:'account_creation_failed', reason: { last_name: 'Enter your last name.' })
186
done(err)
187
188
describe 'testing user_search -- ', ->
189
before(setup)
190
after(teardown)
191
192
it "searches by email", (done) ->
193
api.call
194
event : 'user_search'
195
body :
196
query : '[email protected]'
197
cb : (err, resp) ->
198
expect(resp?.event).toBe('user_search_results')
199
expect(resp?.results?.length).toBe(1)
200
expect(resp?.results?[0].first_name).toBe('Sage')
201
expect(resp?.results?[0].last_name).toBe('CoCalc')
202
expect(resp?.results?[0].email_address).toBe('[email protected]')
203
done(err)
204
205
206
it "searches by first and last name prefixes", (done) ->
207
api.call
208
event : 'user_search'
209
body :
210
query : 'coc sag'
211
cb : (err, resp) ->
212
expect(resp?.event).toBe('user_search_results')
213
expect(resp?.results?.length).toBe(1)
214
expect(resp?.results?[0].first_name).toBe('Sage')
215
expect(resp?.results?[0].last_name).toBe('CoCalc')
216
expect(resp?.results?[0]).toExcludeKey('email_address')
217
done(err)
218
219
it "searches by email and first and last name prefixes", (done) ->
220
api.call
221
event : 'user_search'
222
body :
223
query : 'coc sag,[email protected]'
224
cb : (err, resp) ->
225
expect(resp?.event).toBe('user_search_results')
226
expect(resp?.results?.length).toBe(2)
227
done(err)
228
229