test_AliasModel.py 5.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. import pytest
  2. import json
  3. import sys
  4. import os
  5. sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "../")))
  6. from models.DomainModel import DomainModel
  7. from models.AliasModel import AliasModel
  8. def test_model():
  9. # Generate random alias
  10. random_alias = f"alias_test{os.urandom(4).hex()}@mailcow.local"
  11. # Create an instance of AliasModel
  12. model = AliasModel(
  13. address=random_alias,
  14. goto="test@mailcow.local,test2@mailcow.local"
  15. )
  16. # Test the parser_command attribute
  17. assert model.parser_command == "alias", "Parser command should be 'alias'"
  18. # add Domain for testing
  19. domain_model = DomainModel(domain="mailcow.local")
  20. domain_model.add()
  21. # 1. Alias add tests, should success
  22. r_add = model.add()
  23. assert isinstance(r_add, list), f"Expected a array but received: {json.dumps(r_add, indent=2)}"
  24. assert len(r_add) > 0, f"Wrong array received: {json.dumps(r_add, indent=2)}"
  25. assert "type" in r_add[0], f"'type' key missing in response: {json.dumps(r_add, indent=2)}"
  26. assert r_add[0]['type'] == "success", f"Wrong 'type' received: {r_add[0]['type']}\n{json.dumps(r_add, indent=2)}"
  27. assert "msg" in r_add[0], f"'msg' key missing in response: {json.dumps(r_add, indent=2)}"
  28. assert isinstance(r_add[0]['msg'], list), f"Expected a 'msg' array but received: {json.dumps(r_add, indent=2)}"
  29. assert len(r_add[0]['msg']) > 0 and len(r_add[0]['msg']) <= 3, f"Wrong 'msg' array received: {json.dumps(r_add, indent=2)}"
  30. assert r_add[0]['msg'][0] == "alias_added", f"Wrong 'msg' received: {r_add[0]['msg'][0]}, expected: 'alias_added'\n{json.dumps(r_add, indent=2)}"
  31. # Assign created alias ID for further tests
  32. model.id = r_add[0]['msg'][2]
  33. # 2. Alias add tests, should fail because the alias already exists
  34. r_add = model.add()
  35. assert isinstance(r_add, list), f"Expected a array but received: {json.dumps(r_add, indent=2)}"
  36. assert len(r_add) > 0, f"Wrong array received: {json.dumps(r_add, indent=2)}"
  37. assert "type" in r_add[0], f"'type' key missing in response: {json.dumps(r_add, indent=2)}"
  38. assert r_add[0]['type'] == "danger", f"Wrong 'type' received: {r_add[0]['type']}\n{json.dumps(r_add, indent=2)}"
  39. assert "msg" in r_add[0], f"'msg' key missing in response: {json.dumps(r_add, indent=2)}"
  40. assert isinstance(r_add[0]['msg'], list), f"Expected a 'msg' array but received: {json.dumps(r_add, indent=2)}"
  41. assert len(r_add[0]['msg']) > 0 and len(r_add[0]['msg']) <= 2, f"Wrong 'msg' array received: {json.dumps(r_add, indent=2)}"
  42. assert r_add[0]['msg'][0] == "is_alias_or_mailbox", f"Wrong 'msg' received: {r_add[0]['msg'][0]}, expected: 'is_alias_or_mailbox'\n{json.dumps(r_add, indent=2)}"
  43. # 3. Alias get tests
  44. r_get = model.get()
  45. assert isinstance(r_get, dict), f"Expected a dict but received: {json.dumps(r_get, indent=2)}"
  46. assert "domain" in r_get, f"'domain' key missing in response: {json.dumps(r_get, indent=2)}"
  47. assert "goto" in r_get, f"'goto' key missing in response: {json.dumps(r_get, indent=2)}"
  48. assert "address" in r_get, f"'address' key missing in response: {json.dumps(r_get, indent=2)}"
  49. assert r_get['domain'] == model.address.split("@")[1], f"Wrong 'domain' received: {r_get['domain']}, expected: {model.address.split('@')[1]}\n{json.dumps(r_get, indent=2)}"
  50. assert r_get['goto'] == model.goto, f"Wrong 'goto' received: {r_get['goto']}, expected: {model.goto}\n{json.dumps(r_get, indent=2)}"
  51. assert r_get['address'] == model.address, f"Wrong 'address' received: {r_get['address']}, expected: {model.address}\n{json.dumps(r_get, indent=2)}"
  52. # 4. Alias edit tests
  53. model.goto = "test@mailcow.local"
  54. model.active = 0
  55. r_edit = model.edit()
  56. assert isinstance(r_edit, list), f"Expected a array but received: {json.dumps(r_edit, indent=2)}"
  57. assert len(r_edit) > 0, f"Wrong array received: {json.dumps(r_edit, indent=2)}"
  58. assert "type" in r_edit[0], f"'type' key missing in response: {json.dumps(r_edit, indent=2)}"
  59. assert r_edit[0]['type'] == "success", f"Wrong 'type' received: {r_edit[0]['type']}\n{json.dumps(r_edit, indent=2)}"
  60. assert "msg" in r_edit[0], f"'msg' key missing in response: {json.dumps(r_edit, indent=2)}"
  61. assert isinstance(r_edit[0]['msg'], list), f"Expected a 'msg' array but received: {json.dumps(r_edit, indent=2)}"
  62. assert len(r_edit[0]['msg']) > 0 and len(r_edit[0]['msg']) <= 2, f"Wrong 'msg' array received: {json.dumps(r_edit, indent=2)}"
  63. assert r_edit[0]['msg'][0] == "alias_modified", f"Wrong 'msg' received: {r_edit[0]['msg'][0]}, expected: 'alias_modified'\n{json.dumps(r_edit, indent=2)}"
  64. # 5. Alias delete tests
  65. r_delete = model.delete()
  66. assert isinstance(r_delete, list), f"Expected a array but received: {json.dumps(r_delete, indent=2)}"
  67. assert len(r_delete) > 0, f"Wrong array received: {json.dumps(r_delete, indent=2)}"
  68. assert "type" in r_delete[0], f"'type' key missing in response: {json.dumps(r_delete, indent=2)}"
  69. assert r_delete[0]['type'] == "success", f"Wrong 'type' received: {r_delete[0]['type']}\n{json.dumps(r_delete, indent=2)}"
  70. assert "msg" in r_delete[0], f"'msg' key missing in response: {json.dumps(r_delete, indent=2)}"
  71. assert isinstance(r_delete[0]['msg'], list), f"Expected a 'msg' array but received: {json.dumps(r_delete, indent=2)}"
  72. assert len(r_delete[0]['msg']) > 0 and len(r_delete[0]['msg']) <= 2, f"Wrong 'msg' array received: {json.dumps(r_delete, indent=2)}"
  73. assert r_delete[0]['msg'][0] == "alias_removed", f"Wrong 'msg' received: {r_delete[0]['msg'][0]}, expected: 'alias_removed'\n{json.dumps(r_delete, indent=2)}"
  74. # delete testing Domain
  75. domain_model.delete()
  76. if __name__ == "__main__":
  77. print("Running AliasModel tests...")
  78. test_model()
  79. print("All tests passed!")