test_user_management.py 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. # Copyright IBM Corp, All Rights Reserved.
  2. #
  3. # SPDX-License-Identifier: Apache-2.0
  4. #
  5. import unittest
  6. from flask_testing import TestCase
  7. from flask import url_for
  8. import sys
  9. import os
  10. import logging
  11. import json
  12. from faker import Factory
  13. fake = Factory.create()
  14. sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', 'src'))
  15. from dashboard import app
  16. from common import log_handler, LOG_LEVEL
  17. from modules.models import COMMON_USER
  18. logger = logging.getLogger(__name__)
  19. logger.setLevel(LOG_LEVEL)
  20. logger.addHandler(log_handler)
  21. class UserManagementTestCase(TestCase):
  22. def create_app(self):
  23. app.config['TESTING'] = True
  24. app.config['LOGIN_DISABLED'] = False
  25. return app
  26. def _login(self, username, password):
  27. return self.client.post('/api/auth/login',
  28. data=dict(
  29. username=username,
  30. password=password
  31. ),
  32. follow_redirects=True)
  33. def test_server_is_up_and_running(self):
  34. response = self.client.get("/login")
  35. self.assert200(response)
  36. def test_login_required(self):
  37. response = self.client.get("/")
  38. self.assertRedirects(response, "/login")
  39. def test_valid_login(self):
  40. response = self._login("admin", "pass")
  41. response = response.data.decode("utf-8")
  42. response = json.loads(response)
  43. self.assertTrue(response.get("success", False))
  44. def test_list_user(self):
  45. self._login("admin", "pass")
  46. raw_response = self.client.get("/api/user/list")
  47. response = raw_response.data.decode("utf-8")
  48. response = json.loads(response)
  49. users = response.get("users", {}).get("result", [])
  50. self.assertTrue(len(users) >= 1)
  51. def test_search_user(self):
  52. """
  53. search admin will return admin user info,
  54. search fake username will return user_exists False
  55. """
  56. self._login("admin", "pass")
  57. response = self.client.get(url_for("bp_user_api.search"), query_string={"username": "admin"})
  58. raw_json = response.data.decode("utf-8")
  59. raw_json = json.loads(raw_json)
  60. user_exists = raw_json.get("user_exists", False)
  61. self.assertTrue(user_exists)
  62. user_name = fake.user_name()
  63. response = self.client.get(url_for("bp_user_api.search"), query_string={"username": user_name})
  64. raw_json = response.data.decode("utf-8")
  65. raw_json = json.loads(raw_json)
  66. user_exists = raw_json.get("user_exists", False)
  67. self.assertTrue(not user_exists)
  68. def test_create_update_delete_user(self):
  69. self._login("admin", "pass")
  70. user_name = fake.user_name()
  71. password = fake.password()
  72. raw_response = self.client.post("/api/user/create",
  73. data=dict(
  74. username=user_name,
  75. password=password,
  76. active=True,
  77. role=COMMON_USER
  78. ))
  79. response = raw_response.data.decode("utf-8")
  80. response = json.loads(response)
  81. user_id = response.get("id", "")
  82. self.assertTrue(user_id != "")
  83. response = self._login(user_name, password)
  84. response = response.data.decode("utf-8")
  85. response = json.loads(response)
  86. self.assertTrue(response.get("success", False))
  87. self._login("admin", "pass")
  88. new_user_name = fake.user_name()
  89. response = self.client.put("/api/user/update/%s" % user_id,
  90. data=dict(
  91. username=new_user_name,
  92. active=True,
  93. role=COMMON_USER
  94. ))
  95. response = response.data.decode("utf-8")
  96. response = json.loads(response)
  97. self.assertEqual(response.get("status", ""), "OK")
  98. response = self.client.delete("/api/user/delete/%s" % user_id)
  99. response = response.data.decode("utf-8")
  100. response = json.loads(response)
  101. self.assertEqual(response.get("status", ""), "OK")