Skip to content

Commit 95083ab

Browse files
authored
Merge branch 'main' into skip-ratelimits
2 parents dc11f34 + 89b83bb commit 95083ab

File tree

8 files changed

+275
-177
lines changed

8 files changed

+275
-177
lines changed

tests/unit/manage/views/test_organizations.py

+159-94
Original file line numberDiff line numberDiff line change
@@ -657,92 +657,6 @@ def test_save_organization_validation_fails(
657657
}
658658
assert organization_service.update_organization.calls == []
659659

660-
@pytest.mark.usefixtures("_enable_organizations")
661-
def test_save_organization_name(
662-
self,
663-
db_request,
664-
pyramid_user,
665-
organization_service,
666-
user_service,
667-
monkeypatch,
668-
):
669-
organization = OrganizationFactory.create(name="foobar")
670-
db_request.POST = {
671-
"confirm_current_organization_name": organization.name,
672-
"name": "FooBar",
673-
}
674-
db_request.route_path = pretend.call_recorder(
675-
lambda *a, organization_name, **kw: (
676-
f"/manage/organization/{organization_name}/settings/"
677-
)
678-
)
679-
680-
def rename_organization(organization_id, organization_name):
681-
organization.name = organization_name
682-
683-
monkeypatch.setattr(
684-
organization_service,
685-
"rename_organization",
686-
pretend.call_recorder(rename_organization),
687-
)
688-
689-
admin = None
690-
monkeypatch.setattr(
691-
user_service,
692-
"get_admin_user",
693-
pretend.call_recorder(lambda *a, **kw: admin),
694-
)
695-
696-
save_organization_obj = pretend.stub()
697-
save_organization_cls = pretend.call_recorder(
698-
lambda *a, **kw: save_organization_obj
699-
)
700-
monkeypatch.setattr(org_views, "SaveOrganizationForm", save_organization_cls)
701-
702-
save_organization_name_obj = pretend.stub(
703-
validate=lambda: True, name=pretend.stub(data=db_request.POST["name"])
704-
)
705-
save_organization_name_cls = pretend.call_recorder(
706-
lambda *a, **kw: save_organization_name_obj
707-
)
708-
monkeypatch.setattr(
709-
org_views, "SaveOrganizationNameForm", save_organization_name_cls
710-
)
711-
712-
send_email = pretend.call_recorder(lambda *a, **kw: None)
713-
monkeypatch.setattr(
714-
org_views, "send_admin_organization_renamed_email", send_email
715-
)
716-
monkeypatch.setattr(org_views, "send_organization_renamed_email", send_email)
717-
monkeypatch.setattr(
718-
org_views, "organization_owners", lambda *a, **kw: [pyramid_user]
719-
)
720-
721-
view = org_views.ManageOrganizationSettingsViews(organization, db_request)
722-
result = view.save_organization_name()
723-
724-
assert isinstance(result, HTTPSeeOther)
725-
assert result.headers["Location"] == (
726-
f"/manage/organization/{organization.normalized_name}/settings/#modal-close"
727-
)
728-
assert organization_service.rename_organization.calls == [
729-
pretend.call(organization.id, "FooBar")
730-
]
731-
assert send_email.calls == [
732-
pretend.call(
733-
db_request,
734-
admin,
735-
organization_name="FooBar",
736-
previous_organization_name="foobar",
737-
),
738-
pretend.call(
739-
db_request,
740-
{pyramid_user},
741-
organization_name="FooBar",
742-
previous_organization_name="foobar",
743-
),
744-
]
745-
746660
@pytest.mark.usefixtures("_enable_organizations")
747661
def test_save_organization_name_wrong_confirm(
748662
self, db_request, organization_service, monkeypatch
@@ -772,15 +686,24 @@ def test_save_organization_name_wrong_confirm(
772686
]
773687

774688
@pytest.mark.usefixtures("_enable_organizations")
775-
def test_save_organization_name_validation_fails(
776-
self, db_request, organization_service, monkeypatch
689+
def test_disable_save_organization_name(
690+
self,
691+
db_request,
692+
pyramid_user,
693+
organization_service,
694+
user_service,
695+
monkeypatch,
777696
):
778697
organization = OrganizationFactory.create(name="foobar")
779698
db_request.POST = {
780699
"confirm_current_organization_name": organization.name,
781700
"name": "FooBar",
782701
}
783-
db_request.user = pretend.stub()
702+
db_request.route_path = pretend.call_recorder(
703+
lambda *a, organization_name, **kw: (
704+
f"/manage/organization/{organization_name}/settings/"
705+
)
706+
)
784707

785708
def rename_organization(organization_id, organization_name):
786709
organization.name = organization_name
@@ -791,14 +714,21 @@ def rename_organization(organization_id, organization_name):
791714
pretend.call_recorder(rename_organization),
792715
)
793716

717+
admin = None
718+
monkeypatch.setattr(
719+
user_service,
720+
"get_admin_user",
721+
pretend.call_recorder(lambda *a, **kw: admin),
722+
)
723+
794724
save_organization_obj = pretend.stub()
795725
save_organization_cls = pretend.call_recorder(
796726
lambda *a, **kw: save_organization_obj
797727
)
798728
monkeypatch.setattr(org_views, "SaveOrganizationForm", save_organization_cls)
799729

800730
save_organization_name_obj = pretend.stub(
801-
validate=lambda: False, errors=pretend.stub(values=lambda: ["Invalid"])
731+
validate=lambda: True, name=pretend.stub(data=db_request.POST["name"])
802732
)
803733
save_organization_name_cls = pretend.call_recorder(
804734
lambda *a, **kw: save_organization_name_obj
@@ -807,14 +737,149 @@ def rename_organization(organization_id, organization_name):
807737
org_views, "SaveOrganizationNameForm", save_organization_name_cls
808738
)
809739

740+
send_email = pretend.call_recorder(lambda *a, **kw: None)
741+
810742
view = org_views.ManageOrganizationSettingsViews(organization, db_request)
811743
result = view.save_organization_name()
812744

813-
assert result == {
814-
**view.default_response,
815-
"save_organization_name_form": save_organization_name_obj,
816-
}
745+
assert isinstance(result, HTTPSeeOther)
746+
assert result.headers["Location"] == (
747+
f"/manage/organization/{organization.normalized_name}/settings/"
748+
)
817749
assert organization_service.rename_organization.calls == []
750+
assert send_email.calls == []
751+
752+
# When support for renaming orgs is re-introduced
753+
# @pytest.mark.usefixtures("_enable_organizations")
754+
# def test_save_organization_name(
755+
# self,
756+
# db_request,
757+
# pyramid_user,
758+
# organization_service,
759+
# user_service,
760+
# monkeypatch,
761+
# ):
762+
# organization = OrganizationFactory.create(name="foobar")
763+
# db_request.POST = {
764+
# "confirm_current_organization_name": organization.name,
765+
# "name": "FooBar",
766+
# }
767+
# db_request.route_path = pretend.call_recorder(
768+
# lambda *a, organization_name, **kw: (
769+
# f"/manage/organization/{organization_name}/settings/"
770+
# )
771+
# )
772+
773+
# def rename_organization(organization_id, organization_name):
774+
# organization.name = organization_name
775+
776+
# monkeypatch.setattr(
777+
# organization_service,
778+
# "rename_organization",
779+
# pretend.call_recorder(rename_organization),
780+
# )
781+
782+
# admin = None
783+
# monkeypatch.setattr(
784+
# user_service,
785+
# "get_admin_user",
786+
# pretend.call_recorder(lambda *a, **kw: admin),
787+
# )
788+
789+
# save_organization_obj = pretend.stub()
790+
# save_organization_cls = pretend.call_recorder(
791+
# lambda *a, **kw: save_organization_obj
792+
# )
793+
# monkeypatch.setattr(org_views, "SaveOrganizationForm", save_organization_cls)
794+
795+
# save_organization_name_obj = pretend.stub(
796+
# validate=lambda: True, name=pretend.stub(data=db_request.POST["name"])
797+
# )
798+
# save_organization_name_cls = pretend.call_recorder(
799+
# lambda *a, **kw: save_organization_name_obj
800+
# )
801+
# monkeypatch.setattr(
802+
# org_views, "SaveOrganizationNameForm", save_organization_name_cls
803+
# )
804+
805+
# send_email = pretend.call_recorder(lambda *a, **kw: None)
806+
# monkeypatch.setattr(
807+
# org_views, "send_admin_organization_renamed_email", send_email
808+
# )
809+
# monkeypatch.setattr(org_views, "send_organization_renamed_email", send_email)
810+
# monkeypatch.setattr(
811+
# org_views, "organization_owners", lambda *a, **kw: [pyramid_user]
812+
# )
813+
814+
# view = org_views.ManageOrganizationSettingsViews(organization, db_request)
815+
# result = view.save_organization_name()
816+
817+
# assert isinstance(result, HTTPSeeOther)
818+
# assert result.headers["Location"] == (
819+
# f"/manage/organization/{organization.normalized_name}/settings/#modal-close"
820+
# )
821+
# assert organization_service.rename_organization.calls == [
822+
# pretend.call(organization.id, "FooBar")
823+
# ]
824+
# assert send_email.calls == [
825+
# pretend.call(
826+
# db_request,
827+
# admin,
828+
# organization_name="FooBar",
829+
# previous_organization_name="foobar",
830+
# ),
831+
# pretend.call(
832+
# db_request,
833+
# {pyramid_user},
834+
# organization_name="FooBar",
835+
# previous_organization_name="foobar",
836+
# ),
837+
# ]
838+
839+
# @pytest.mark.usefixtures("_enable_organizations")
840+
# def test_save_organization_name_validation_fails(
841+
# self, db_request, organization_service, monkeypatch
842+
# ):
843+
# organization = OrganizationFactory.create(name="foobar")
844+
# db_request.POST = {
845+
# "confirm_current_organization_name": organization.name,
846+
# "name": "FooBar",
847+
# }
848+
# db_request.user = pretend.stub()
849+
850+
# def rename_organization(organization_id, organization_name):
851+
# organization.name = organization_name
852+
853+
# monkeypatch.setattr(
854+
# organization_service,
855+
# "rename_organization",
856+
# pretend.call_recorder(rename_organization),
857+
# )
858+
859+
# save_organization_obj = pretend.stub()
860+
# save_organization_cls = pretend.call_recorder(
861+
# lambda *a, **kw: save_organization_obj
862+
# )
863+
# monkeypatch.setattr(org_views, "SaveOrganizationForm", save_organization_cls)
864+
865+
# save_organization_name_obj = pretend.stub(
866+
# validate=lambda: False, errors=pretend.stub(values=lambda: ["Invalid"])
867+
# )
868+
# save_organization_name_cls = pretend.call_recorder(
869+
# lambda *a, **kw: save_organization_name_obj
870+
# )
871+
# monkeypatch.setattr(
872+
# org_views, "SaveOrganizationNameForm", save_organization_name_cls
873+
# )
874+
875+
# view = org_views.ManageOrganizationSettingsViews(organization, db_request)
876+
# result = view.save_organization_name()
877+
878+
# assert result == {
879+
# **view.default_response,
880+
# "save_organization_name_form": save_organization_name_obj,
881+
# }
882+
# assert organization_service.rename_organization.calls == []
818883

819884
@pytest.mark.usefixtures("_enable_organizations")
820885
def test_delete_organization(

tests/unit/packaging/test_typosnyper.py

+1
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
("dateutil-python", ("swapped_words", "python-dateutil")),
3030
("numpi", ("common_typos", "numpy")),
3131
("requestz", ("common_typos", "requests")),
32+
("python-dateutil", None), # Pass, swapped_words same as original
3233
],
3334
)
3435
def test_typo_check_name(name, expected):

tests/unit/test_config.py

+1
Original file line numberDiff line numberDiff line change
@@ -603,6 +603,7 @@ def test_root_factory_access_control_list():
603603
Permissions.AdminObservationsRead,
604604
Permissions.AdminObservationsWrite,
605605
Permissions.AdminOrganizationsRead,
606+
Permissions.AdminOrganizationsWrite,
606607
Permissions.AdminProhibitedEmailDomainsRead,
607608
Permissions.AdminProhibitedProjectsRead,
608609
Permissions.AdminProhibitedUsernameRead,

warehouse/config.py

+1
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@ class RootFactory:
118118
Permissions.AdminObservationsRead,
119119
Permissions.AdminObservationsWrite,
120120
Permissions.AdminOrganizationsRead,
121+
Permissions.AdminOrganizationsWrite,
121122
Permissions.AdminProhibitedEmailDomainsRead,
122123
Permissions.AdminProhibitedProjectsRead,
123124
Permissions.AdminProhibitedUsernameRead,

0 commit comments

Comments
 (0)