test_user.py 48KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583
  1. # -*- coding: utf-8 -*-
  2. """
  3. Tests for /api/v2/users subpath endpoints.
  4. """
  5. import transaction
  6. from tracim import models
  7. from tracim.lib.core.group import GroupApi
  8. from tracim.lib.core.user import UserApi
  9. from tracim.models import get_tm_session
  10. from tracim.tests import FunctionalTest
  11. from tracim.fixtures.content import Content as ContentFixtures
  12. from tracim.fixtures.users_and_groups import Base as BaseFixture
  13. class TestUserWorkspaceEndpoint(FunctionalTest):
  14. # -*- coding: utf-8 -*-
  15. """
  16. Tests for /api/v2/users/{user_id}/workspaces
  17. """
  18. fixtures = [BaseFixture, ContentFixtures]
  19. def test_api__get_user_workspaces__ok_200__nominal_case(self):
  20. """
  21. Check obtain all workspaces reachables for user with user auth.
  22. """
  23. self.testapp.authorization = (
  24. 'Basic',
  25. (
  26. 'admin@admin.admin',
  27. 'admin@admin.admin'
  28. )
  29. )
  30. res = self.testapp.get('/api/v2/users/1/workspaces', status=200)
  31. res = res.json_body
  32. workspace = res[0]
  33. assert workspace['workspace_id'] == 1
  34. assert workspace['label'] == 'Business'
  35. assert workspace['slug'] == 'business'
  36. assert len(workspace['sidebar_entries']) == 7
  37. sidebar_entry = workspace['sidebar_entries'][0]
  38. assert sidebar_entry['slug'] == 'dashboard'
  39. assert sidebar_entry['label'] == 'Dashboard'
  40. assert sidebar_entry['route'] == '/#/workspaces/1/dashboard' # nopep8
  41. assert sidebar_entry['hexcolor'] == "#252525"
  42. assert sidebar_entry['fa_icon'] == "signal"
  43. sidebar_entry = workspace['sidebar_entries'][1]
  44. assert sidebar_entry['slug'] == 'contents/all'
  45. assert sidebar_entry['label'] == 'All Contents'
  46. assert sidebar_entry['route'] == "/#/workspaces/1/contents" # nopep8
  47. assert sidebar_entry['hexcolor'] == "#fdfdfd"
  48. assert sidebar_entry['fa_icon'] == "th"
  49. sidebar_entry = workspace['sidebar_entries'][2]
  50. assert sidebar_entry['slug'] == 'contents/html-documents'
  51. assert sidebar_entry['label'] == 'Text Documents'
  52. assert sidebar_entry['route'] == '/#/workspaces/1/contents?type=html-documents' # nopep8
  53. assert sidebar_entry['hexcolor'] == "#3f52e3"
  54. assert sidebar_entry['fa_icon'] == "file-text-o"
  55. sidebar_entry = workspace['sidebar_entries'][3]
  56. assert sidebar_entry['slug'] == 'contents/markdownpluspage'
  57. assert sidebar_entry['label'] == 'Markdown Plus Documents'
  58. assert sidebar_entry['route'] == "/#/workspaces/1/contents?type=markdownpluspage" # nopep8
  59. assert sidebar_entry['hexcolor'] == "#f12d2d"
  60. assert sidebar_entry['fa_icon'] == "file-code-o"
  61. sidebar_entry = workspace['sidebar_entries'][4]
  62. assert sidebar_entry['slug'] == 'contents/files'
  63. assert sidebar_entry['label'] == 'Files'
  64. assert sidebar_entry['route'] == "/#/workspaces/1/contents?type=file" # nopep8
  65. assert sidebar_entry['hexcolor'] == "#FF9900"
  66. assert sidebar_entry['fa_icon'] == "paperclip"
  67. sidebar_entry = workspace['sidebar_entries'][5]
  68. assert sidebar_entry['slug'] == 'contents/threads'
  69. assert sidebar_entry['label'] == 'Threads'
  70. assert sidebar_entry['route'] == "/#/workspaces/1/contents?type=thread" # nopep8
  71. assert sidebar_entry['hexcolor'] == "#ad4cf9"
  72. assert sidebar_entry['fa_icon'] == "comments-o"
  73. sidebar_entry = workspace['sidebar_entries'][6]
  74. assert sidebar_entry['slug'] == 'calendar'
  75. assert sidebar_entry['label'] == 'Calendar'
  76. assert sidebar_entry['route'] == "/#/workspaces/1/calendar" # nopep8
  77. assert sidebar_entry['hexcolor'] == "#757575"
  78. assert sidebar_entry['fa_icon'] == "calendar"
  79. def test_api__get_user_workspaces__err_403__unallowed_user(self):
  80. """
  81. Check obtain all workspaces reachables for one user
  82. with another non-admin user auth.
  83. """
  84. self.testapp.authorization = (
  85. 'Basic',
  86. (
  87. 'lawrence-not-real-email@fsf.local',
  88. 'foobarbaz'
  89. )
  90. )
  91. res = self.testapp.get('/api/v2/users/1/workspaces', status=403)
  92. assert isinstance(res.json, dict)
  93. assert 'code' in res.json.keys()
  94. assert 'message' in res.json.keys()
  95. assert 'details' in res.json.keys()
  96. def test_api__get_user_workspaces__err_401__unregistered_user(self):
  97. """
  98. Check obtain all workspaces reachables for one user
  99. without correct user auth (user unregistered).
  100. """
  101. self.testapp.authorization = (
  102. 'Basic',
  103. (
  104. 'john@doe.doe',
  105. 'lapin'
  106. )
  107. )
  108. res = self.testapp.get('/api/v2/users/1/workspaces', status=401)
  109. assert isinstance(res.json, dict)
  110. assert 'code' in res.json.keys()
  111. assert 'message' in res.json.keys()
  112. assert 'details' in res.json.keys()
  113. def test_api__get_user_workspaces__err_400__user_does_not_exist(self):
  114. """
  115. Check obtain all workspaces reachables for one user who does
  116. not exist
  117. with a correct user auth.
  118. """
  119. self.testapp.authorization = (
  120. 'Basic',
  121. (
  122. 'admin@admin.admin',
  123. 'admin@admin.admin'
  124. )
  125. )
  126. res = self.testapp.get('/api/v2/users/5/workspaces', status=400)
  127. assert isinstance(res.json, dict)
  128. assert 'code' in res.json.keys()
  129. assert 'message' in res.json.keys()
  130. assert 'details' in res.json.keys()
  131. class TestUserEndpoint(FunctionalTest):
  132. # -*- coding: utf-8 -*-
  133. """
  134. Tests for GET /api/v2/users/{user_id}
  135. """
  136. fixtures = [BaseFixture]
  137. def test_api__get_user__ok_200__admin(self):
  138. dbsession = get_tm_session(self.session_factory, transaction.manager)
  139. admin = dbsession.query(models.User) \
  140. .filter(models.User.email == 'admin@admin.admin') \
  141. .one()
  142. uapi = UserApi(
  143. current_user=admin,
  144. session=dbsession,
  145. config=self.app_config,
  146. )
  147. gapi = GroupApi(
  148. current_user=admin,
  149. session=dbsession,
  150. config=self.app_config,
  151. )
  152. groups = [gapi.get_one_with_name('users')]
  153. test_user = uapi.create_user(
  154. email='test@test.test',
  155. password='pass',
  156. name='bob',
  157. groups=groups,
  158. timezone='Europe/Paris',
  159. do_save=True,
  160. do_notify=False,
  161. )
  162. uapi.save(test_user)
  163. transaction.commit()
  164. user_id = int(test_user.user_id)
  165. self.testapp.authorization = (
  166. 'Basic',
  167. (
  168. 'admin@admin.admin',
  169. 'admin@admin.admin'
  170. )
  171. )
  172. res = self.testapp.get(
  173. '/api/v2/users/{}'.format(user_id),
  174. status=200
  175. )
  176. res = res.json_body
  177. assert res['user_id'] == user_id
  178. assert res['created']
  179. assert res['is_active'] is True
  180. assert res['profile'] == 'users'
  181. assert res['email'] == 'test@test.test'
  182. assert res['public_name'] == 'bob'
  183. assert res['timezone'] == 'Europe/Paris'
  184. def test_api__get_user__ok_200__user_itself(self):
  185. dbsession = get_tm_session(self.session_factory, transaction.manager)
  186. admin = dbsession.query(models.User) \
  187. .filter(models.User.email == 'admin@admin.admin') \
  188. .one()
  189. uapi = UserApi(
  190. current_user=admin,
  191. session=dbsession,
  192. config=self.app_config,
  193. )
  194. gapi = GroupApi(
  195. current_user=admin,
  196. session=dbsession,
  197. config=self.app_config,
  198. )
  199. groups = [gapi.get_one_with_name('users')]
  200. test_user = uapi.create_user(
  201. email='test@test.test',
  202. password='pass',
  203. name='bob',
  204. groups=groups,
  205. timezone='Europe/Paris',
  206. do_save=True,
  207. do_notify=False,
  208. )
  209. uapi.save(test_user)
  210. transaction.commit()
  211. user_id = int(test_user.user_id)
  212. self.testapp.authorization = (
  213. 'Basic',
  214. (
  215. 'test@test.test',
  216. 'pass'
  217. )
  218. )
  219. res = self.testapp.get(
  220. '/api/v2/users/{}'.format(user_id),
  221. status=200
  222. )
  223. res = res.json_body
  224. assert res['user_id'] == user_id
  225. assert res['created']
  226. assert res['is_active'] is True
  227. assert res['profile'] == 'users'
  228. assert res['email'] == 'test@test.test'
  229. assert res['public_name'] == 'bob'
  230. assert res['timezone'] == 'Europe/Paris'
  231. def test_api__get_user__err_403__other_normal_user(self):
  232. dbsession = get_tm_session(self.session_factory, transaction.manager)
  233. admin = dbsession.query(models.User) \
  234. .filter(models.User.email == 'admin@admin.admin') \
  235. .one()
  236. uapi = UserApi(
  237. current_user=admin,
  238. session=dbsession,
  239. config=self.app_config,
  240. )
  241. gapi = GroupApi(
  242. current_user=admin,
  243. session=dbsession,
  244. config=self.app_config,
  245. )
  246. groups = [gapi.get_one_with_name('users')]
  247. test_user = uapi.create_user(
  248. email='test@test.test',
  249. password='pass',
  250. name='bob',
  251. groups=groups,
  252. timezone='Europe/Paris',
  253. do_save=True,
  254. do_notify=False,
  255. )
  256. test_user2 = uapi.create_user(
  257. email='test2@test2.test2',
  258. password='pass',
  259. name='bob2',
  260. groups=groups,
  261. timezone='Europe/Paris',
  262. do_save=True,
  263. do_notify=False,
  264. )
  265. uapi.save(test_user2)
  266. uapi.save(test_user)
  267. transaction.commit()
  268. user_id = int(test_user.user_id)
  269. self.testapp.authorization = (
  270. 'Basic',
  271. (
  272. 'test2@test2.test2',
  273. 'pass'
  274. )
  275. )
  276. self.testapp.get(
  277. '/api/v2/users/{}'.format(user_id),
  278. status=403
  279. )
  280. class TestSetEmailEndpoint(FunctionalTest):
  281. # -*- coding: utf-8 -*-
  282. """
  283. Tests for PUT /api/v2/users/{user_id}/email
  284. """
  285. fixtures = [BaseFixture]
  286. def test_api__set_user_email__ok_200__admin(self):
  287. dbsession = get_tm_session(self.session_factory, transaction.manager)
  288. admin = dbsession.query(models.User) \
  289. .filter(models.User.email == 'admin@admin.admin') \
  290. .one()
  291. uapi = UserApi(
  292. current_user=admin,
  293. session=dbsession,
  294. config=self.app_config,
  295. )
  296. gapi = GroupApi(
  297. current_user=admin,
  298. session=dbsession,
  299. config=self.app_config,
  300. )
  301. groups = [gapi.get_one_with_name('users')]
  302. test_user = uapi.create_user(
  303. email='test@test.test',
  304. password='pass',
  305. name='bob',
  306. groups=groups,
  307. timezone='Europe/Paris',
  308. do_save=True,
  309. do_notify=False,
  310. )
  311. uapi.save(test_user)
  312. transaction.commit()
  313. user_id = int(test_user.user_id)
  314. self.testapp.authorization = (
  315. 'Basic',
  316. (
  317. 'admin@admin.admin',
  318. 'admin@admin.admin'
  319. )
  320. )
  321. # check before
  322. res = self.testapp.get(
  323. '/api/v2/users/{}'.format(user_id),
  324. status=200
  325. )
  326. res = res.json_body
  327. assert res['email'] == 'test@test.test'
  328. # Set password
  329. params = {
  330. 'email': 'mysuperemail@email.fr',
  331. 'loggedin_user_password': 'admin@admin.admin',
  332. }
  333. self.testapp.put_json(
  334. '/api/v2/users/{}/email'.format(user_id),
  335. params=params,
  336. status=200,
  337. )
  338. # Check After
  339. res = self.testapp.get(
  340. '/api/v2/users/{}'.format(user_id),
  341. status=200
  342. )
  343. res = res.json_body
  344. assert res['email'] == 'mysuperemail@email.fr'
  345. def test_api__set_user_email__err_403__admin_wrong_password(self):
  346. dbsession = get_tm_session(self.session_factory, transaction.manager)
  347. admin = dbsession.query(models.User) \
  348. .filter(models.User.email == 'admin@admin.admin') \
  349. .one()
  350. uapi = UserApi(
  351. current_user=admin,
  352. session=dbsession,
  353. config=self.app_config,
  354. )
  355. gapi = GroupApi(
  356. current_user=admin,
  357. session=dbsession,
  358. config=self.app_config,
  359. )
  360. groups = [gapi.get_one_with_name('users')]
  361. test_user = uapi.create_user(
  362. email='test@test.test',
  363. password='pass',
  364. name='bob',
  365. groups=groups,
  366. timezone='Europe/Paris',
  367. do_save=True,
  368. do_notify=False,
  369. )
  370. uapi.save(test_user)
  371. transaction.commit()
  372. user_id = int(test_user.user_id)
  373. self.testapp.authorization = (
  374. 'Basic',
  375. (
  376. 'admin@admin.admin',
  377. 'admin@admin.admin'
  378. )
  379. )
  380. # check before
  381. res = self.testapp.get(
  382. '/api/v2/users/{}'.format(user_id),
  383. status=200
  384. )
  385. res = res.json_body
  386. assert res['email'] == 'test@test.test'
  387. # Set password
  388. params = {
  389. 'email': 'mysuperemail@email.fr',
  390. 'loggedin_user_password': 'badpassword',
  391. }
  392. self.testapp.put_json(
  393. '/api/v2/users/{}/email'.format(user_id),
  394. params=params,
  395. status=403,
  396. )
  397. # Check After
  398. res = self.testapp.get(
  399. '/api/v2/users/{}'.format(user_id),
  400. status=200
  401. )
  402. res = res.json_body
  403. assert res['email'] == 'test@test.test'
  404. def test_api__set_user_email__err_400__admin_string_is_not_email(self):
  405. dbsession = get_tm_session(self.session_factory, transaction.manager)
  406. admin = dbsession.query(models.User) \
  407. .filter(models.User.email == 'admin@admin.admin') \
  408. .one()
  409. uapi = UserApi(
  410. current_user=admin,
  411. session=dbsession,
  412. config=self.app_config,
  413. )
  414. gapi = GroupApi(
  415. current_user=admin,
  416. session=dbsession,
  417. config=self.app_config,
  418. )
  419. groups = [gapi.get_one_with_name('users')]
  420. test_user = uapi.create_user(
  421. email='test@test.test',
  422. password='pass',
  423. name='bob',
  424. groups=groups,
  425. timezone='Europe/Paris',
  426. do_save=True,
  427. do_notify=False,
  428. )
  429. uapi.save(test_user)
  430. transaction.commit()
  431. user_id = int(test_user.user_id)
  432. self.testapp.authorization = (
  433. 'Basic',
  434. (
  435. 'admin@admin.admin',
  436. 'admin@admin.admin'
  437. )
  438. )
  439. # check before
  440. res = self.testapp.get(
  441. '/api/v2/users/{}'.format(user_id),
  442. status=200
  443. )
  444. res = res.json_body
  445. assert res['email'] == 'test@test.test'
  446. # Set password
  447. params = {
  448. 'email': 'thatisnotandemail',
  449. 'loggedin_user_password': 'admin@admin.admin',
  450. }
  451. self.testapp.put_json(
  452. '/api/v2/users/{}/email'.format(user_id),
  453. params=params,
  454. status=400,
  455. )
  456. # Check After
  457. res = self.testapp.get(
  458. '/api/v2/users/{}'.format(user_id),
  459. status=200
  460. )
  461. res = res.json_body
  462. assert res['email'] == 'test@test.test'
  463. def test_api__set_user_email__ok_200__user_itself(self):
  464. dbsession = get_tm_session(self.session_factory, transaction.manager)
  465. admin = dbsession.query(models.User) \
  466. .filter(models.User.email == 'admin@admin.admin') \
  467. .one()
  468. uapi = UserApi(
  469. current_user=admin,
  470. session=dbsession,
  471. config=self.app_config,
  472. )
  473. gapi = GroupApi(
  474. current_user=admin,
  475. session=dbsession,
  476. config=self.app_config,
  477. )
  478. groups = [gapi.get_one_with_name('users')]
  479. test_user = uapi.create_user(
  480. email='test@test.test',
  481. password='pass',
  482. name='bob',
  483. groups=groups,
  484. timezone='Europe/Paris',
  485. do_save=True,
  486. do_notify=False,
  487. )
  488. uapi.save(test_user)
  489. transaction.commit()
  490. user_id = int(test_user.user_id)
  491. self.testapp.authorization = (
  492. 'Basic',
  493. (
  494. 'test@test.test',
  495. 'pass'
  496. )
  497. )
  498. # check before
  499. res = self.testapp.get(
  500. '/api/v2/users/{}'.format(user_id),
  501. status=200
  502. )
  503. res = res.json_body
  504. assert res['email'] == 'test@test.test'
  505. # Set password
  506. params = {
  507. 'email': 'mysuperemail@email.fr',
  508. 'loggedin_user_password': 'pass',
  509. }
  510. self.testapp.put_json(
  511. '/api/v2/users/{}/email'.format(user_id),
  512. params=params,
  513. status=200,
  514. )
  515. self.testapp.authorization = (
  516. 'Basic',
  517. (
  518. 'mysuperemail@email.fr',
  519. 'pass'
  520. )
  521. )
  522. # Check After
  523. res = self.testapp.get(
  524. '/api/v2/users/{}'.format(user_id),
  525. status=200
  526. )
  527. res = res.json_body
  528. assert res['email'] == 'mysuperemail@email.fr'
  529. def test_api__set_user_email__err_403__other_normal_user(self):
  530. dbsession = get_tm_session(self.session_factory, transaction.manager)
  531. admin = dbsession.query(models.User) \
  532. .filter(models.User.email == 'admin@admin.admin') \
  533. .one()
  534. uapi = UserApi(
  535. current_user=admin,
  536. session=dbsession,
  537. config=self.app_config,
  538. )
  539. gapi = GroupApi(
  540. current_user=admin,
  541. session=dbsession,
  542. config=self.app_config,
  543. )
  544. groups = [gapi.get_one_with_name('users')]
  545. test_user = uapi.create_user(
  546. email='test@test.test',
  547. password='pass',
  548. name='bob',
  549. groups=groups,
  550. timezone='Europe/Paris',
  551. do_save=True,
  552. do_notify=False,
  553. )
  554. test_user2 = uapi.create_user(
  555. email='test2@test2.test2',
  556. password='pass',
  557. name='bob2',
  558. groups=groups,
  559. timezone='Europe/Paris',
  560. do_save=True,
  561. do_notify=False,
  562. )
  563. uapi.save(test_user2)
  564. uapi.save(test_user)
  565. transaction.commit()
  566. user_id = int(test_user.user_id)
  567. self.testapp.authorization = (
  568. 'Basic',
  569. (
  570. 'test@test.test',
  571. 'pass'
  572. )
  573. )
  574. # Set password
  575. params = {
  576. 'email': 'mysuperemail@email.fr',
  577. 'loggedin_user_password': 'test2@test2.test2',
  578. }
  579. self.testapp.put_json(
  580. '/api/v2/users/{}/email'.format(user_id),
  581. params=params,
  582. status=403,
  583. )
  584. class TestSetPasswordEndpoint(FunctionalTest):
  585. # -*- coding: utf-8 -*-
  586. """
  587. Tests for PUT /api/v2/users/{user_id}/password
  588. """
  589. fixtures = [BaseFixture]
  590. def test_api__set_user_password__ok_200__admin(self):
  591. dbsession = get_tm_session(self.session_factory, transaction.manager)
  592. admin = dbsession.query(models.User) \
  593. .filter(models.User.email == 'admin@admin.admin') \
  594. .one()
  595. uapi = UserApi(
  596. current_user=admin,
  597. session=dbsession,
  598. config=self.app_config,
  599. )
  600. gapi = GroupApi(
  601. current_user=admin,
  602. session=dbsession,
  603. config=self.app_config,
  604. )
  605. groups = [gapi.get_one_with_name('users')]
  606. test_user = uapi.create_user(
  607. email='test@test.test',
  608. password='pass',
  609. name='bob',
  610. groups=groups,
  611. timezone='Europe/Paris',
  612. do_save=True,
  613. do_notify=False,
  614. )
  615. uapi.save(test_user)
  616. transaction.commit()
  617. user_id = int(test_user.user_id)
  618. self.testapp.authorization = (
  619. 'Basic',
  620. (
  621. 'admin@admin.admin',
  622. 'admin@admin.admin'
  623. )
  624. )
  625. # check before
  626. user = uapi.get_one(user_id)
  627. assert user.validate_password('pass')
  628. assert not user.validate_password('mynewpassword')
  629. # Set password
  630. params = {
  631. 'new_password': 'mynewpassword',
  632. 'new_password2': 'mynewpassword',
  633. 'loggedin_user_password': 'admin@admin.admin',
  634. }
  635. self.testapp.put_json(
  636. '/api/v2/users/{}/password'.format(user_id),
  637. params=params,
  638. status=204,
  639. )
  640. # Check After
  641. user = uapi.get_one(user_id)
  642. assert not user.validate_password('pass')
  643. assert user.validate_password('mynewpassword')
  644. def test_api__set_user_password__err_403__admin_wrong_password(self):
  645. dbsession = get_tm_session(self.session_factory, transaction.manager)
  646. admin = dbsession.query(models.User) \
  647. .filter(models.User.email == 'admin@admin.admin') \
  648. .one()
  649. uapi = UserApi(
  650. current_user=admin,
  651. session=dbsession,
  652. config=self.app_config,
  653. )
  654. gapi = GroupApi(
  655. current_user=admin,
  656. session=dbsession,
  657. config=self.app_config,
  658. )
  659. groups = [gapi.get_one_with_name('users')]
  660. test_user = uapi.create_user(
  661. email='test@test.test',
  662. password='pass',
  663. name='bob',
  664. groups=groups,
  665. timezone='Europe/Paris',
  666. do_save=True,
  667. do_notify=False,
  668. )
  669. uapi.save(test_user)
  670. transaction.commit()
  671. user_id = int(test_user.user_id)
  672. self.testapp.authorization = (
  673. 'Basic',
  674. (
  675. 'admin@admin.admin',
  676. 'admin@admin.admin'
  677. )
  678. )
  679. # check before
  680. user = uapi.get_one(user_id)
  681. assert user.validate_password('pass')
  682. assert not user.validate_password('mynewpassword')
  683. # Set password
  684. params = {
  685. 'new_password': 'mynewpassword',
  686. 'new_password2': 'mynewpassword',
  687. 'loggedin_user_password': 'wrongpassword',
  688. }
  689. self.testapp.put_json(
  690. '/api/v2/users/{}/password'.format(user_id),
  691. params=params,
  692. status=403,
  693. )
  694. # Check After
  695. user = uapi.get_one(user_id)
  696. assert user.validate_password('pass')
  697. assert not user.validate_password('mynewpassword')
  698. def test_api__set_user_password__err_400__admin_passwords_do_not_match(self): # nopep8
  699. dbsession = get_tm_session(self.session_factory, transaction.manager)
  700. admin = dbsession.query(models.User) \
  701. .filter(models.User.email == 'admin@admin.admin') \
  702. .one()
  703. uapi = UserApi(
  704. current_user=admin,
  705. session=dbsession,
  706. config=self.app_config,
  707. )
  708. gapi = GroupApi(
  709. current_user=admin,
  710. session=dbsession,
  711. config=self.app_config,
  712. )
  713. groups = [gapi.get_one_with_name('users')]
  714. test_user = uapi.create_user(
  715. email='test@test.test',
  716. password='pass',
  717. name='bob',
  718. groups=groups,
  719. timezone='Europe/Paris',
  720. do_save=True,
  721. do_notify=False,
  722. )
  723. uapi.save(test_user)
  724. transaction.commit()
  725. user_id = int(test_user.user_id)
  726. self.testapp.authorization = (
  727. 'Basic',
  728. (
  729. 'admin@admin.admin',
  730. 'admin@admin.admin'
  731. )
  732. )
  733. # check before
  734. user = uapi.get_one(user_id)
  735. assert user.validate_password('pass')
  736. assert not user.validate_password('mynewpassword')
  737. assert not user.validate_password('mynewpassword2')
  738. # Set password
  739. params = {
  740. 'new_password': 'mynewpassword',
  741. 'new_password2': 'mynewpassword2',
  742. 'loggedin_user_password': 'admin@admin.admin',
  743. }
  744. self.testapp.put_json(
  745. '/api/v2/users/{}/password'.format(user_id),
  746. params=params,
  747. status=400,
  748. )
  749. # Check After
  750. user = uapi.get_one(user_id)
  751. assert user.validate_password('pass')
  752. assert not user.validate_password('mynewpassword')
  753. assert not user.validate_password('mynewpassword2')
  754. def test_api__set_user_password__ok_200__user_itself(self):
  755. dbsession = get_tm_session(self.session_factory, transaction.manager)
  756. admin = dbsession.query(models.User) \
  757. .filter(models.User.email == 'admin@admin.admin') \
  758. .one()
  759. uapi = UserApi(
  760. current_user=admin,
  761. session=dbsession,
  762. config=self.app_config,
  763. )
  764. gapi = GroupApi(
  765. current_user=admin,
  766. session=dbsession,
  767. config=self.app_config,
  768. )
  769. groups = [gapi.get_one_with_name('users')]
  770. test_user = uapi.create_user(
  771. email='test@test.test',
  772. password='pass',
  773. name='bob',
  774. groups=groups,
  775. timezone='Europe/Paris',
  776. do_save=True,
  777. do_notify=False,
  778. )
  779. uapi.save(test_user)
  780. transaction.commit()
  781. user_id = int(test_user.user_id)
  782. self.testapp.authorization = (
  783. 'Basic',
  784. (
  785. 'test@test.test',
  786. 'pass'
  787. )
  788. )
  789. # check before
  790. user = uapi.get_one(user_id)
  791. assert user.validate_password('pass')
  792. assert not user.validate_password('mynewpassword')
  793. # Set password
  794. params = {
  795. 'new_password': 'mynewpassword',
  796. 'new_password2': 'mynewpassword',
  797. 'loggedin_user_password': 'pass',
  798. }
  799. self.testapp.put_json(
  800. '/api/v2/users/{}/password'.format(user_id),
  801. params=params,
  802. status=204,
  803. )
  804. # Check After
  805. user = uapi.get_one(user_id)
  806. assert not user.validate_password('pass')
  807. assert user.validate_password('mynewpassword')
  808. def test_api__set_user_email__err_403__other_normal_user(self):
  809. dbsession = get_tm_session(self.session_factory, transaction.manager)
  810. admin = dbsession.query(models.User) \
  811. .filter(models.User.email == 'admin@admin.admin') \
  812. .one()
  813. uapi = UserApi(
  814. current_user=admin,
  815. session=dbsession,
  816. config=self.app_config,
  817. )
  818. gapi = GroupApi(
  819. current_user=admin,
  820. session=dbsession,
  821. config=self.app_config,
  822. )
  823. groups = [gapi.get_one_with_name('users')]
  824. test_user = uapi.create_user(
  825. email='test@test.test',
  826. password='pass',
  827. name='bob',
  828. groups=groups,
  829. timezone='Europe/Paris',
  830. do_save=True,
  831. do_notify=False,
  832. )
  833. test_user2 = uapi.create_user(
  834. email='test2@test2.test2',
  835. password='pass',
  836. name='bob2',
  837. groups=groups,
  838. timezone='Europe/Paris',
  839. do_save=True,
  840. do_notify=False,
  841. )
  842. uapi.save(test_user2)
  843. uapi.save(test_user)
  844. transaction.commit()
  845. user_id = int(test_user.user_id)
  846. self.testapp.authorization = (
  847. 'Basic',
  848. (
  849. 'test@test.test',
  850. 'pass'
  851. )
  852. )
  853. # Set password
  854. params = {
  855. 'email': 'mysuperemail@email.fr',
  856. 'loggedin_user_password': 'test2@test2.test2',
  857. }
  858. self.testapp.put_json(
  859. '/api/v2/users/{}/email'.format(user_id),
  860. params=params,
  861. status=403,
  862. )
  863. class TestSetUserInfoEndpoint(FunctionalTest):
  864. # -*- coding: utf-8 -*-
  865. """
  866. Tests for PUT /api/v2/users/{user_id}
  867. """
  868. fixtures = [BaseFixture]
  869. def test_api__set_user_info__ok_200__admin(self):
  870. dbsession = get_tm_session(self.session_factory, transaction.manager)
  871. admin = dbsession.query(models.User) \
  872. .filter(models.User.email == 'admin@admin.admin') \
  873. .one()
  874. uapi = UserApi(
  875. current_user=admin,
  876. session=dbsession,
  877. config=self.app_config,
  878. )
  879. gapi = GroupApi(
  880. current_user=admin,
  881. session=dbsession,
  882. config=self.app_config,
  883. )
  884. groups = [gapi.get_one_with_name('users')]
  885. test_user = uapi.create_user(
  886. email='test@test.test',
  887. password='pass',
  888. name='bob',
  889. groups=groups,
  890. timezone='Europe/Paris',
  891. do_save=True,
  892. do_notify=False,
  893. )
  894. uapi.save(test_user)
  895. transaction.commit()
  896. user_id = int(test_user.user_id)
  897. self.testapp.authorization = (
  898. 'Basic',
  899. (
  900. 'admin@admin.admin',
  901. 'admin@admin.admin'
  902. )
  903. )
  904. # check before
  905. res = self.testapp.get(
  906. '/api/v2/users/{}'.format(user_id),
  907. status=200
  908. )
  909. res = res.json_body
  910. assert res['user_id'] == user_id
  911. assert res['public_name'] == 'bob'
  912. assert res['timezone'] == 'Europe/Paris'
  913. # Set params
  914. params = {
  915. 'public_name': 'updated',
  916. 'timezone': 'Europe/London',
  917. }
  918. self.testapp.put_json(
  919. '/api/v2/users/{}'.format(user_id),
  920. params=params,
  921. status=200,
  922. )
  923. # Check After
  924. res = self.testapp.get(
  925. '/api/v2/users/{}'.format(user_id),
  926. status=200
  927. )
  928. res = res.json_body
  929. assert res['user_id'] == user_id
  930. assert res['public_name'] == 'updated'
  931. assert res['timezone'] == 'Europe/London'
  932. def test_api__set_user_info__ok_200__user_itself(self):
  933. dbsession = get_tm_session(self.session_factory, transaction.manager)
  934. admin = dbsession.query(models.User) \
  935. .filter(models.User.email == 'admin@admin.admin') \
  936. .one()
  937. uapi = UserApi(
  938. current_user=admin,
  939. session=dbsession,
  940. config=self.app_config,
  941. )
  942. gapi = GroupApi(
  943. current_user=admin,
  944. session=dbsession,
  945. config=self.app_config,
  946. )
  947. groups = [gapi.get_one_with_name('users')]
  948. test_user = uapi.create_user(
  949. email='test@test.test',
  950. password='pass',
  951. name='bob',
  952. groups=groups,
  953. timezone='Europe/Paris',
  954. do_save=True,
  955. do_notify=False,
  956. )
  957. uapi.save(test_user)
  958. transaction.commit()
  959. user_id = int(test_user.user_id)
  960. self.testapp.authorization = (
  961. 'Basic',
  962. (
  963. 'test@test.test',
  964. 'pass',
  965. )
  966. )
  967. # check before
  968. res = self.testapp.get(
  969. '/api/v2/users/{}'.format(user_id),
  970. status=200
  971. )
  972. res = res.json_body
  973. assert res['user_id'] == user_id
  974. assert res['public_name'] == 'bob'
  975. assert res['timezone'] == 'Europe/Paris'
  976. # Set params
  977. params = {
  978. 'public_name': 'updated',
  979. 'timezone': 'Europe/London',
  980. }
  981. self.testapp.put_json(
  982. '/api/v2/users/{}'.format(user_id),
  983. params=params,
  984. status=200,
  985. )
  986. # Check After
  987. res = self.testapp.get(
  988. '/api/v2/users/{}'.format(user_id),
  989. status=200
  990. )
  991. res = res.json_body
  992. assert res['user_id'] == user_id
  993. assert res['public_name'] == 'updated'
  994. assert res['timezone'] == 'Europe/London'
  995. def test_api__set_user_email__err_403__other_normal_user(self):
  996. dbsession = get_tm_session(self.session_factory, transaction.manager)
  997. admin = dbsession.query(models.User) \
  998. .filter(models.User.email == 'admin@admin.admin') \
  999. .one()
  1000. uapi = UserApi(
  1001. current_user=admin,
  1002. session=dbsession,
  1003. config=self.app_config,
  1004. )
  1005. gapi = GroupApi(
  1006. current_user=admin,
  1007. session=dbsession,
  1008. config=self.app_config,
  1009. )
  1010. groups = [gapi.get_one_with_name('users')]
  1011. test_user = uapi.create_user(
  1012. email='test@test.test',
  1013. password='pass',
  1014. name='bob',
  1015. groups=groups,
  1016. timezone='Europe/Paris',
  1017. do_save=True,
  1018. do_notify=False,
  1019. )
  1020. test_user2 = uapi.create_user(
  1021. email='test2@test2.test2',
  1022. password='pass',
  1023. name='test',
  1024. groups=groups,
  1025. timezone='Europe/Paris',
  1026. do_save=True,
  1027. do_notify=False,
  1028. )
  1029. uapi.save(test_user2)
  1030. uapi.save(test_user)
  1031. transaction.commit()
  1032. user_id = int(test_user.user_id)
  1033. self.testapp.authorization = (
  1034. 'Basic',
  1035. (
  1036. 'test2@test2.test2',
  1037. 'pass',
  1038. )
  1039. )
  1040. # Set params
  1041. params = {
  1042. 'public_name': 'updated',
  1043. 'timezone': 'Europe/London',
  1044. }
  1045. self.testapp.put_json(
  1046. '/api/v2/users/{}'.format(user_id),
  1047. params=params,
  1048. status=403,
  1049. )
  1050. class TestSetUserProfilEndpoint(FunctionalTest):
  1051. # -*- coding: utf-8 -*-
  1052. """
  1053. Tests for PUT /api/v2/users/{user_id}/profile
  1054. """
  1055. fixtures = [BaseFixture]
  1056. def test_api__set_user_info__ok_200__admin(self):
  1057. dbsession = get_tm_session(self.session_factory, transaction.manager)
  1058. admin = dbsession.query(models.User) \
  1059. .filter(models.User.email == 'admin@admin.admin') \
  1060. .one()
  1061. uapi = UserApi(
  1062. current_user=admin,
  1063. session=dbsession,
  1064. config=self.app_config,
  1065. )
  1066. gapi = GroupApi(
  1067. current_user=admin,
  1068. session=dbsession,
  1069. config=self.app_config,
  1070. )
  1071. groups = [gapi.get_one_with_name('users')]
  1072. test_user = uapi.create_user(
  1073. email='test@test.test',
  1074. password='pass',
  1075. name='bob',
  1076. groups=groups,
  1077. timezone='Europe/Paris',
  1078. do_save=True,
  1079. do_notify=False,
  1080. )
  1081. uapi.save(test_user)
  1082. transaction.commit()
  1083. user_id = int(test_user.user_id)
  1084. self.testapp.authorization = (
  1085. 'Basic',
  1086. (
  1087. 'admin@admin.admin',
  1088. 'admin@admin.admin'
  1089. )
  1090. )
  1091. # check before
  1092. res = self.testapp.get(
  1093. '/api/v2/users/{}'.format(user_id),
  1094. status=200
  1095. )
  1096. res = res.json_body
  1097. assert res['user_id'] == user_id
  1098. assert res['profile'] == 'users'
  1099. # Set params
  1100. params = {
  1101. 'profile': 'administrators',
  1102. }
  1103. self.testapp.put_json(
  1104. '/api/v2/users/{}/profile'.format(user_id),
  1105. params=params,
  1106. status=204,
  1107. )
  1108. # Check After
  1109. res = self.testapp.get(
  1110. '/api/v2/users/{}'.format(user_id),
  1111. status=200
  1112. )
  1113. res = res.json_body
  1114. assert res['user_id'] == user_id
  1115. assert res['profile'] == 'administrators'
  1116. def test_api__set_user_info__err_403__user_itself(self):
  1117. dbsession = get_tm_session(self.session_factory, transaction.manager)
  1118. admin = dbsession.query(models.User) \
  1119. .filter(models.User.email == 'admin@admin.admin') \
  1120. .one()
  1121. uapi = UserApi(
  1122. current_user=admin,
  1123. session=dbsession,
  1124. config=self.app_config,
  1125. )
  1126. gapi = GroupApi(
  1127. current_user=admin,
  1128. session=dbsession,
  1129. config=self.app_config,
  1130. )
  1131. groups = [gapi.get_one_with_name('users')]
  1132. test_user = uapi.create_user(
  1133. email='test@test.test',
  1134. password='pass',
  1135. name='bob',
  1136. groups=groups,
  1137. timezone='Europe/Paris',
  1138. do_save=True,
  1139. do_notify=False,
  1140. )
  1141. uapi.save(test_user)
  1142. transaction.commit()
  1143. user_id = int(test_user.user_id)
  1144. self.testapp.authorization = (
  1145. 'Basic',
  1146. (
  1147. 'test@test.test',
  1148. 'pass',
  1149. )
  1150. )
  1151. # check before
  1152. res = self.testapp.get(
  1153. '/api/v2/users/{}'.format(user_id),
  1154. status=200
  1155. )
  1156. res = res.json_body
  1157. assert res['user_id'] == user_id
  1158. assert res['profile'] == 'users'
  1159. # Set params
  1160. params = {
  1161. 'profile': 'administrators',
  1162. }
  1163. self.testapp.put_json(
  1164. '/api/v2/users/{}/profile'.format(user_id),
  1165. params=params,
  1166. status=403,
  1167. )
  1168. # Check After
  1169. res = self.testapp.get(
  1170. '/api/v2/users/{}'.format(user_id),
  1171. status=200
  1172. )
  1173. res = res.json_body
  1174. assert res['user_id'] == user_id
  1175. assert res['profile'] == 'users'
  1176. def test_api__set_user_email__err_403__other_normal_user(self):
  1177. dbsession = get_tm_session(self.session_factory, transaction.manager)
  1178. admin = dbsession.query(models.User) \
  1179. .filter(models.User.email == 'admin@admin.admin') \
  1180. .one()
  1181. uapi = UserApi(
  1182. current_user=admin,
  1183. session=dbsession,
  1184. config=self.app_config,
  1185. )
  1186. gapi = GroupApi(
  1187. current_user=admin,
  1188. session=dbsession,
  1189. config=self.app_config,
  1190. )
  1191. groups = [gapi.get_one_with_name('users')]
  1192. test_user = uapi.create_user(
  1193. email='test@test.test',
  1194. password='pass',
  1195. name='bob',
  1196. groups=groups,
  1197. timezone='Europe/Paris',
  1198. do_save=True,
  1199. do_notify=False,
  1200. )
  1201. test_user2 = uapi.create_user(
  1202. email='test2@test2.test2',
  1203. password='pass',
  1204. name='test',
  1205. groups=groups,
  1206. timezone='Europe/Paris',
  1207. do_save=True,
  1208. do_notify=False,
  1209. )
  1210. uapi.save(test_user2)
  1211. uapi.save(test_user)
  1212. transaction.commit()
  1213. user_id = int(test_user.user_id)
  1214. self.testapp.authorization = (
  1215. 'Basic',
  1216. (
  1217. 'test2@test2.test2',
  1218. 'pass',
  1219. )
  1220. )
  1221. # Set params
  1222. params = {
  1223. 'profile': 'administrators',
  1224. }
  1225. self.testapp.put_json(
  1226. '/api/v2/users/{}/profile'.format(user_id),
  1227. params=params,
  1228. status=403,
  1229. )
  1230. class TestSetUserEnableDisableEndpoints(FunctionalTest):
  1231. # -*- coding: utf-8 -*-
  1232. """
  1233. Tests for PUT /api/v2/users/{user_id}/enable
  1234. and PUT /api/v2/users/{user_id}/disable
  1235. """
  1236. fixtures = [BaseFixture]
  1237. def test_api_enable_user__ok_200__admin(self):
  1238. dbsession = get_tm_session(self.session_factory, transaction.manager)
  1239. admin = dbsession.query(models.User) \
  1240. .filter(models.User.email == 'admin@admin.admin') \
  1241. .one()
  1242. uapi = UserApi(
  1243. current_user=admin,
  1244. session=dbsession,
  1245. config=self.app_config,
  1246. )
  1247. gapi = GroupApi(
  1248. current_user=admin,
  1249. session=dbsession,
  1250. config=self.app_config,
  1251. )
  1252. groups = [gapi.get_one_with_name('users')]
  1253. test_user = uapi.create_user(
  1254. email='test@test.test',
  1255. password='pass',
  1256. name='bob',
  1257. groups=groups,
  1258. timezone='Europe/Paris',
  1259. do_save=True,
  1260. do_notify=False,
  1261. )
  1262. uapi.disable(test_user, do_save=True)
  1263. uapi.save(test_user)
  1264. transaction.commit()
  1265. user_id = int(test_user.user_id)
  1266. self.testapp.authorization = (
  1267. 'Basic',
  1268. (
  1269. 'admin@admin.admin',
  1270. 'admin@admin.admin'
  1271. )
  1272. )
  1273. # check before
  1274. res = self.testapp.get(
  1275. '/api/v2/users/{}'.format(user_id),
  1276. status=200
  1277. )
  1278. res = res.json_body
  1279. assert res['user_id'] == user_id
  1280. assert res['is_active'] is False
  1281. self.testapp.put_json(
  1282. '/api/v2/users/{}/enable'.format(user_id),
  1283. status=204,
  1284. )
  1285. # Check After
  1286. res = self.testapp.get(
  1287. '/api/v2/users/{}'.format(user_id),
  1288. status=200
  1289. )
  1290. res = res.json_body
  1291. assert res['user_id'] == user_id
  1292. assert res['is_active'] is True
  1293. def test_api_disable_user__ok_200__admin(self):
  1294. dbsession = get_tm_session(self.session_factory, transaction.manager)
  1295. admin = dbsession.query(models.User) \
  1296. .filter(models.User.email == 'admin@admin.admin') \
  1297. .one()
  1298. uapi = UserApi(
  1299. current_user=admin,
  1300. session=dbsession,
  1301. config=self.app_config,
  1302. )
  1303. gapi = GroupApi(
  1304. current_user=admin,
  1305. session=dbsession,
  1306. config=self.app_config,
  1307. )
  1308. groups = [gapi.get_one_with_name('users')]
  1309. test_user = uapi.create_user(
  1310. email='test@test.test',
  1311. password='pass',
  1312. name='bob',
  1313. groups=groups,
  1314. timezone='Europe/Paris',
  1315. do_save=True,
  1316. do_notify=False,
  1317. )
  1318. uapi.enable(test_user, do_save=True)
  1319. uapi.save(test_user)
  1320. transaction.commit()
  1321. user_id = int(test_user.user_id)
  1322. self.testapp.authorization = (
  1323. 'Basic',
  1324. (
  1325. 'admin@admin.admin',
  1326. 'admin@admin.admin'
  1327. )
  1328. )
  1329. # check before
  1330. res = self.testapp.get(
  1331. '/api/v2/users/{}'.format(user_id),
  1332. status=200
  1333. )
  1334. res = res.json_body
  1335. assert res['user_id'] == user_id
  1336. assert res['is_active'] is True
  1337. self.testapp.put_json(
  1338. '/api/v2/users/{}/disable'.format(user_id),
  1339. status=204,
  1340. )
  1341. # Check After
  1342. res = self.testapp.get(
  1343. '/api/v2/users/{}'.format(user_id),
  1344. status=200
  1345. )
  1346. res = res.json_body
  1347. assert res['user_id'] == user_id
  1348. assert res['is_active'] is False
  1349. def test_api_enable_user__err_403__other_account(self):
  1350. dbsession = get_tm_session(self.session_factory, transaction.manager)
  1351. admin = dbsession.query(models.User) \
  1352. .filter(models.User.email == 'admin@admin.admin') \
  1353. .one()
  1354. uapi = UserApi(
  1355. current_user=admin,
  1356. session=dbsession,
  1357. config=self.app_config,
  1358. )
  1359. gapi = GroupApi(
  1360. current_user=admin,
  1361. session=dbsession,
  1362. config=self.app_config,
  1363. )
  1364. groups = [gapi.get_one_with_name('users')]
  1365. test_user = uapi.create_user(
  1366. email='test@test.test',
  1367. password='pass',
  1368. name='bob',
  1369. groups=groups,
  1370. timezone='Europe/Paris',
  1371. do_save=True,
  1372. do_notify=False,
  1373. )
  1374. test_user2 = uapi.create_user(
  1375. email='test2@test2.test2',
  1376. password='pass',
  1377. name='test2',
  1378. groups=groups,
  1379. timezone='Europe/Paris',
  1380. do_save=True,
  1381. do_notify=False,
  1382. )
  1383. uapi.disable(test_user, do_save=True)
  1384. uapi.save(test_user2)
  1385. uapi.save(test_user)
  1386. transaction.commit()
  1387. user_id = int(test_user.user_id)
  1388. self.testapp.authorization = (
  1389. 'Basic',
  1390. (
  1391. 'test2@test2.test2',
  1392. 'pass'
  1393. )
  1394. )
  1395. self.testapp.put_json(
  1396. '/api/v2/users/{}/enable'.format(user_id),
  1397. status=403,
  1398. )
  1399. def test_api_disable_user__err_403__other_account(self):
  1400. dbsession = get_tm_session(self.session_factory, transaction.manager)
  1401. admin = dbsession.query(models.User) \
  1402. .filter(models.User.email == 'admin@admin.admin') \
  1403. .one()
  1404. uapi = UserApi(
  1405. current_user=admin,
  1406. session=dbsession,
  1407. config=self.app_config,
  1408. )
  1409. gapi = GroupApi(
  1410. current_user=admin,
  1411. session=dbsession,
  1412. config=self.app_config,
  1413. )
  1414. groups = [gapi.get_one_with_name('users')]
  1415. test_user = uapi.create_user(
  1416. email='test@test.test',
  1417. password='pass',
  1418. name='bob',
  1419. groups=groups,
  1420. timezone='Europe/Paris',
  1421. do_save=True,
  1422. do_notify=False,
  1423. )
  1424. test_user2 = uapi.create_user(
  1425. email='test2@test2.test2',
  1426. password='pass',
  1427. name='test2',
  1428. groups=groups,
  1429. timezone='Europe/Paris',
  1430. do_save=True,
  1431. do_notify=False,
  1432. )
  1433. uapi.enable(test_user, do_save=True)
  1434. uapi.save(test_user2)
  1435. uapi.save(test_user)
  1436. transaction.commit()
  1437. user_id = int(test_user.user_id)
  1438. self.testapp.authorization = (
  1439. 'Basic',
  1440. (
  1441. 'test2@test2.test2',
  1442. 'pass'
  1443. )
  1444. )
  1445. self.testapp.put_json(
  1446. '/api/v2/users/{}/disable'.format(user_id),
  1447. status=403,
  1448. )
  1449. def test_api_disable_user__ok_200__user_itself(self):
  1450. dbsession = get_tm_session(self.session_factory, transaction.manager)
  1451. admin = dbsession.query(models.User) \
  1452. .filter(models.User.email == 'admin@admin.admin') \
  1453. .one()
  1454. uapi = UserApi(
  1455. current_user=admin,
  1456. session=dbsession,
  1457. config=self.app_config,
  1458. )
  1459. gapi = GroupApi(
  1460. current_user=admin,
  1461. session=dbsession,
  1462. config=self.app_config,
  1463. )
  1464. groups = [gapi.get_one_with_name('users')]
  1465. test_user = uapi.create_user(
  1466. email='test@test.test',
  1467. password='pass',
  1468. name='bob',
  1469. groups=groups,
  1470. timezone='Europe/Paris',
  1471. do_save=True,
  1472. do_notify=False,
  1473. )
  1474. uapi.enable(test_user, do_save=True)
  1475. uapi.save(test_user)
  1476. transaction.commit()
  1477. user_id = int(test_user.user_id)
  1478. self.testapp.authorization = (
  1479. 'Basic',
  1480. (
  1481. 'test@test.test',
  1482. 'pass'
  1483. )
  1484. )
  1485. # check before
  1486. res = self.testapp.get(
  1487. '/api/v2/users/{}'.format(user_id),
  1488. status=200
  1489. )
  1490. res = res.json_body
  1491. assert res['user_id'] == user_id
  1492. assert res['is_active'] is True
  1493. self.testapp.put_json(
  1494. '/api/v2/users/{}/disable'.format(user_id),
  1495. status=403,
  1496. )
  1497. # Check After
  1498. res = self.testapp.get(
  1499. '/api/v2/users/{}'.format(user_id),
  1500. status=200
  1501. )
  1502. res = res.json_body
  1503. assert res['user_id'] == user_id
  1504. assert res['is_active'] is True