@@ -842,6 +842,61 @@ def testAccessFilesOnly(self):
842842 })
843843
844844
845+ class TestProjectsView (TestCase ):
846+ def testListAllProjectsWithExpectedShape (self ):
847+ from manifests .models import NodeData , NodeBuildProject
848+
849+ alpha = Project .objects .create (name = "Alpha" )
850+ beta = Project .objects .create (name = "Beta" )
851+
852+ alpha_user_1 = create_random_user ()
853+ alpha_user_2 = create_random_user ()
854+ beta_user = create_random_user ()
855+
856+ UserMembership .objects .create (project = alpha , user = alpha_user_1 )
857+ UserMembership .objects .create (project = alpha , user = alpha_user_2 )
858+ UserMembership .objects .create (project = beta , user = beta_user )
859+
860+ alpha_node_1 = Node .objects .create (vsn = "W001" )
861+ alpha_node_2 = Node .objects .create (vsn = "W002" )
862+ beta_node = Node .objects .create (vsn = "W010" )
863+
864+ NodeMembership .objects .create (project = alpha , node = alpha_node_1 )
865+ NodeMembership .objects .create (project = alpha , node = alpha_node_2 )
866+ NodeMembership .objects .create (project = beta , node = beta_node )
867+
868+ # Create NodeData with projects from manifests
869+ sage_project = NodeBuildProject .objects .create (name = "Sage" )
870+ sgt_project = NodeBuildProject .objects .create (name = "SGT" )
871+
872+ NodeData .objects .create (vsn = "W001" , project = sage_project )
873+ NodeData .objects .create (vsn = "W002" , project = sgt_project )
874+ NodeData .objects .create (vsn = "W010" , project = sage_project )
875+
876+ # Login a user to access the authenticated endpoint
877+ self .client .force_login (alpha_user_1 )
878+
879+ r = self .client .get ("/projects/" )
880+ self .assertEqual (r .status_code , status .HTTP_200_OK )
881+
882+ data = r .json ()
883+ self .assertEqual ([item ["name" ] for item in data ], ["Alpha" , "Beta" ])
884+
885+ alpha_data = data [0 ]
886+ self .assertEqual (alpha_data ["member_count" ], 2 )
887+ self .assertEqual (
888+ alpha_data ["nodes" ],
889+ [
890+ {"vsn" : "W001" , "project" : "Sage" },
891+ {"vsn" : "W002" , "project" : "SGT" },
892+ ],
893+ )
894+
895+ beta_data = data [1 ]
896+ self .assertEqual (beta_data ["member_count" ], 1 )
897+ self .assertEqual (beta_data ["nodes" ], [{"vsn" : "W010" , "project" : "Sage" }])
898+
899+
845900class TestAuth (TestCase ):
846901 """
847902 TestAuth tests that our post Globus login, create user and logout flows work as expected.
0 commit comments