Coverage for webapp/endpoints/invites.py: 78%

45 statements  

« prev     ^ index     » next       coverage.py v7.10.5, created at 2025-08-26 22:06 +0000

1# Packages 

2import json 

3import flask 

4from canonicalwebteam.exceptions import ( 

5 StoreApiResponseErrorList, 

6) 

7from canonicalwebteam.store_api.dashboard import Dashboard 

8from flask.json import jsonify 

9 

10# Local 

11from webapp.decorators import login_required, exchange_required 

12from webapp.helpers import api_session 

13 

14 

15dashboard = Dashboard(api_session) 

16 

17invites = flask.Blueprint( 

18 "invites", 

19 __name__, 

20) 

21 

22 

23@invites.route("/api/store/<store_id>/invites") 

24@login_required 

25@exchange_required 

26def get_invites(store_id): 

27 invites = dashboard.get_store_invites(flask.session, store_id) 

28 

29 return jsonify(invites) 

30 

31 

32@invites.route("/api/store/<store_id>/invite/update", methods=["POST"]) 

33@login_required 

34@exchange_required 

35def update_invite_status(store_id): 

36 invites = json.loads(flask.request.form.get("invites")) 

37 

38 res = {} 

39 

40 try: 

41 dashboard.update_store_invites(flask.session, store_id, invites) 

42 res["msg"] = "Changes saved" 

43 except StoreApiResponseErrorList as api_response_error_list: 

44 msgs = [ 

45 f"{error.get('message', 'An error occurred')}" 

46 for error in api_response_error_list.errors 

47 ] 

48 

49 msgs = list(dict.fromkeys(msgs)) 

50 

51 for msg in msgs: 

52 flask.flash(msg, "negative") 

53 

54 return jsonify(res) 

55 

56 

57@invites.route("/api/store/<store_id>/invite", methods=["POST"]) 

58@login_required 

59@exchange_required 

60def post_invite_members(store_id): 

61 members = json.loads(flask.request.form.get("members")) 

62 

63 res = {} 

64 

65 try: 

66 dashboard.invite_store_members(flask.session, store_id, members) 

67 res["msg"] = "Changes saved" 

68 except StoreApiResponseErrorList as api_response_error_list: 

69 msgs = [ 

70 f"{error.get('message', 'An error occurred')}" 

71 for error in api_response_error_list.errors 

72 ] 

73 

74 msgs = list(dict.fromkeys(msgs)) 

75 

76 for msg in msgs: 

77 flask.flash(msg, "negative") 

78 

79 return jsonify(res)