|
18 | 18 | InvoiceBillingFactory, |
19 | 19 | OrganizationLevelTokenFactory, |
20 | 20 | OwnerFactory, |
| 21 | + PlanFactory, |
21 | 22 | SentryUserFactory, |
22 | 23 | SessionFactory, |
23 | 24 | StripeBillingFactory, |
| 25 | + TierFactory, |
24 | 26 | UserFactory, |
25 | 27 | ) |
26 | 28 | from shared.django_apps.core.tests.factories import PullFactory, RepositoryFactory |
|
39 | 41 | UserAdmin, |
40 | 42 | find_and_remove_stale_users, |
41 | 43 | ) |
42 | | -from codecov_auth.models import OrganizationLevelToken, Owner, SentryUser, User |
| 44 | +from codecov_auth.models import ( |
| 45 | + OrganizationLevelToken, |
| 46 | + Owner, |
| 47 | + Plan, |
| 48 | + SentryUser, |
| 49 | + Tier, |
| 50 | + User, |
| 51 | +) |
43 | 52 | from core.models import Pull |
44 | 53 |
|
45 | 54 |
|
@@ -881,3 +890,157 @@ def test_account_widget(self): |
881 | 890 | self.assertFalse(form.base_fields["account"].widget.can_add_related) |
882 | 891 | self.assertFalse(form.base_fields["account"].widget.can_change_related) |
883 | 892 | self.assertFalse(form.base_fields["account"].widget.can_delete_related) |
| 893 | + |
| 894 | + |
| 895 | +class PlanAdminTest(TestCase): |
| 896 | + def setUp(self): |
| 897 | + self.staff_user = UserFactory(is_staff=True) |
| 898 | + self.client.force_login(user=self.staff_user) |
| 899 | + admin_site = AdminSite() |
| 900 | + admin_site.register(Plan) |
| 901 | + |
| 902 | + def test_plan_admin_modal_display(self): |
| 903 | + plan = PlanFactory() |
| 904 | + response = self.client.get( |
| 905 | + reverse("admin:codecov_auth_plan_change", args=[plan.pk]) |
| 906 | + ) |
| 907 | + self.assertEqual(response.status_code, 200) |
| 908 | + self.assertContains(response, plan.name) |
| 909 | + |
| 910 | + def test_plan_modal_tiers_display(self): |
| 911 | + tier = TierFactory() |
| 912 | + plan = PlanFactory(tier=tier) |
| 913 | + response = self.client.get( |
| 914 | + reverse("admin:codecov_auth_plan_change", args=[plan.pk]) |
| 915 | + ) |
| 916 | + self.assertEqual(response.status_code, 200) |
| 917 | + self.assertContains(response, tier.tier_name) |
| 918 | + |
| 919 | + def test_add_plans_modal_action(self): |
| 920 | + plan = PlanFactory(base_unit_price=10, max_seats=5) |
| 921 | + tier = TierFactory() |
| 922 | + data = { |
| 923 | + "action": "add_plans", |
| 924 | + ACTION_CHECKBOX_NAME: [plan.pk], |
| 925 | + "tier_id": tier.pk, |
| 926 | + } |
| 927 | + response = self.client.post( |
| 928 | + reverse("admin:codecov_auth_plan_changelist"), data=data |
| 929 | + ) |
| 930 | + self.assertEqual(response.status_code, 302) |
| 931 | + self.assertEqual(response.url, "/admin/codecov_auth/plan/") |
| 932 | + |
| 933 | + def test_plan_change_form(self): |
| 934 | + plan = PlanFactory() |
| 935 | + response = self.client.get( |
| 936 | + reverse("admin:codecov_auth_plan_change", args=[plan.pk]) |
| 937 | + ) |
| 938 | + self.assertEqual(response.status_code, 200) |
| 939 | + for field in [ |
| 940 | + "tier", |
| 941 | + "name", |
| 942 | + "marketing_name", |
| 943 | + "base_unit_price", |
| 944 | + "benefits", |
| 945 | + "billing_rate", |
| 946 | + "is_active", |
| 947 | + "max_seats", |
| 948 | + "monthly_uploads_limit", |
| 949 | + "paid_plan", |
| 950 | + ]: |
| 951 | + self.assertContains(response, f"id_{field}") |
| 952 | + |
| 953 | + def test_plan_change_form_validation(self): |
| 954 | + plan = PlanFactory(base_unit_price=-10) |
| 955 | + |
| 956 | + response = self.client.post( |
| 957 | + reverse("admin:codecov_auth_plan_change", args=[plan.pk]), |
| 958 | + { |
| 959 | + "tier": plan.tier_id, |
| 960 | + "name": plan.name, |
| 961 | + "marketing_name": plan.marketing_name, |
| 962 | + "base_unit_price": -10, |
| 963 | + "benefits": plan.benefits, |
| 964 | + "is_active": plan.is_active, |
| 965 | + "paid_plan": plan.paid_plan, |
| 966 | + }, |
| 967 | + ) |
| 968 | + self.assertEqual(response.status_code, 200) |
| 969 | + self.assertContains(response, "Base unit price cannot be negative.") |
| 970 | + |
| 971 | + response = self.client.post( |
| 972 | + reverse("admin:codecov_auth_plan_change", args=[plan.pk]), |
| 973 | + { |
| 974 | + "tier": plan.tier_id, |
| 975 | + "name": plan.name, |
| 976 | + "marketing_name": plan.marketing_name, |
| 977 | + "base_unit_price": plan.base_unit_price, |
| 978 | + "benefits": plan.benefits, |
| 979 | + "is_active": plan.is_active, |
| 980 | + "max_seats": -5, |
| 981 | + "paid_plan": plan.paid_plan, |
| 982 | + }, |
| 983 | + ) |
| 984 | + self.assertEqual(response.status_code, 200) |
| 985 | + self.assertContains(response, "Max seats cannot be negative.") |
| 986 | + |
| 987 | + response = self.client.post( |
| 988 | + reverse("admin:codecov_auth_plan_change", args=[plan.pk]), |
| 989 | + { |
| 990 | + "tier": plan.tier_id, |
| 991 | + "name": plan.name, |
| 992 | + "marketing_name": plan.marketing_name, |
| 993 | + "benefits": plan.benefits, |
| 994 | + "is_active": plan.is_active, |
| 995 | + "monthly_uploads_limit": -5, |
| 996 | + "paid_plan": plan.paid_plan, |
| 997 | + }, |
| 998 | + ) |
| 999 | + self.assertEqual(response.status_code, 200) |
| 1000 | + self.assertContains(response, "Monthly uploads limit cannot be negative.") |
| 1001 | + |
| 1002 | + |
| 1003 | +class TierAdminTest(TestCase): |
| 1004 | + def setUp(self): |
| 1005 | + self.staff_user = UserFactory(is_staff=True) |
| 1006 | + self.client.force_login(user=self.staff_user) |
| 1007 | + admin_site = AdminSite() |
| 1008 | + admin_site.register(Tier) |
| 1009 | + |
| 1010 | + def test_tier_modal_plans_display(self): |
| 1011 | + tier = TierFactory() |
| 1012 | + response = self.client.get( |
| 1013 | + reverse("admin:codecov_auth_tier_change", args=[tier.pk]) |
| 1014 | + ) |
| 1015 | + self.assertEqual(response.status_code, 200) |
| 1016 | + self.assertContains(response, tier.tier_name) |
| 1017 | + |
| 1018 | + def test_add_plans_modal_action(self): |
| 1019 | + tier = TierFactory() |
| 1020 | + plan = PlanFactory() |
| 1021 | + data = { |
| 1022 | + "action": "add_plans", |
| 1023 | + ACTION_CHECKBOX_NAME: [plan.pk], |
| 1024 | + "tier_id": tier.pk, |
| 1025 | + } |
| 1026 | + response = self.client.post( |
| 1027 | + reverse("admin:codecov_auth_tier_changelist"), data=data |
| 1028 | + ) |
| 1029 | + self.assertEqual(response.status_code, 302) |
| 1030 | + self.assertEqual(response.url, "/admin/codecov_auth/tier/") |
| 1031 | + |
| 1032 | + def test_tier_change_form(self): |
| 1033 | + tier = TierFactory() |
| 1034 | + response = self.client.get( |
| 1035 | + reverse("admin:codecov_auth_tier_change", args=[tier.pk]) |
| 1036 | + ) |
| 1037 | + self.assertEqual(response.status_code, 200) |
| 1038 | + for field in [ |
| 1039 | + "tier_name", |
| 1040 | + "bundle_analysis", |
| 1041 | + "test_analytics", |
| 1042 | + "flaky_test_detection", |
| 1043 | + "project_coverage", |
| 1044 | + "private_repo_support", |
| 1045 | + ]: |
| 1046 | + self.assertContains(response, f"id_{field}") |
0 commit comments