@@ -637,3 +637,134 @@ def test_nonexistent_dataset_redirects_anonymous_to_login(self, client, helpers,
637637 def test_nonexistent_dataset_generates_404_for_user (self , client , logged_in_user , helpers , recipe , url ):
638638 response = client .get (url % 10000 )
639639 assert response .status_code == 404
640+
641+
642+ @pytest .mark .django_db
643+ class TestDatasetCompareFittingResultsView :
644+ def test_shows_fittings_related_to_dataset (self , client , fittingresult_version ):
645+ fit = fittingresult_version .fittingresult
646+
647+ # should not be included, as it uses a different dataset
648+ recipes .fittingresult_version .make ()
649+
650+ response = client .get ('/datasets/%d/fittings' % fit .dataset .pk )
651+
652+ assert response .status_code == 200
653+ assert response .context ['comparisons' ] == [(fit .model , [fit ])]
654+
655+ def test_groups_by_model (self , client , helpers , public_dataset ):
656+ m1 , m2 = recipes .model .make (_quantity = 2 )
657+ m1v = helpers .add_cached_version (m1 , visibility = 'public' )
658+ m2v = helpers .add_cached_version (m2 , visibility = 'public' )
659+
660+ # Create publicly visible fitting result versions
661+ fit1_m1 = recipes .fittingresult_version .make (
662+ fittingresult__dataset = public_dataset ,
663+ fittingresult__model = m1 ,
664+ fittingresult__model_version = m1v ,
665+ fittingresult__fittingspec_version__visibility = 'public' ,
666+ fittingresult__protocol_version__visibility = 'public' ,
667+ ).fittingresult
668+
669+ fit2_m1 = recipes .fittingresult_version .make (
670+ fittingresult__dataset = public_dataset ,
671+ fittingresult__model = m1 ,
672+ fittingresult__model_version = m1v ,
673+ fittingresult__fittingspec_version__visibility = 'public' ,
674+ fittingresult__protocol_version__visibility = 'public' ,
675+ ).fittingresult
676+
677+ fit3_m2 = recipes .fittingresult_version .make (
678+ fittingresult__dataset = public_dataset ,
679+ fittingresult__model = m2 ,
680+ fittingresult__model_version = m2v ,
681+ fittingresult__fittingspec_version__visibility = 'public' ,
682+ fittingresult__protocol_version__visibility = 'public' ,
683+ ).fittingresult
684+
685+ response = client .get ('/datasets/%d/fittings' % public_dataset .id )
686+
687+ assert response .status_code == 200
688+ assert response .context ['comparisons' ] == [
689+ (m1 , [fit2_m1 , fit1_m1 ]),
690+ (m2 , [fit3_m2 ]),
691+ ]
692+
693+ def test_multiple_model_versions_for_dataset (self , client , helpers , public_dataset ):
694+ m1 , m2 = recipes .model .make (_quantity = 2 )
695+ m1v1 = helpers .add_cached_version (m1 , visibility = 'public' )
696+ m1v2 = helpers .add_cached_version (m1 , visibility = 'public' )
697+ m2v = helpers .add_cached_version (m2 , visibility = 'public' )
698+
699+ # Create publicly visible fitting result versions
700+ fit1_m1v1 = recipes .fittingresult_version .make (
701+ fittingresult__dataset = public_dataset ,
702+ fittingresult__model = m1 ,
703+ fittingresult__model_version = m1v1 ,
704+ fittingresult__fittingspec_version__visibility = 'public' ,
705+ fittingresult__protocol_version__visibility = 'public' ,
706+ ).fittingresult
707+
708+ fit2_m1v2 = recipes .fittingresult_version .make (
709+ fittingresult__dataset = public_dataset ,
710+ fittingresult__model = m1 ,
711+ fittingresult__model_version = m1v2 ,
712+ fittingresult__fittingspec_version__visibility = 'public' ,
713+ fittingresult__protocol_version__visibility = 'public' ,
714+ ).fittingresult
715+
716+ fit3_m2v = recipes .fittingresult_version .make (
717+ fittingresult__dataset = public_dataset ,
718+ fittingresult__model = m2 ,
719+ fittingresult__model_version = m2v ,
720+ fittingresult__fittingspec_version__visibility = 'public' ,
721+ fittingresult__protocol_version__visibility = 'public' ,
722+ ).fittingresult
723+
724+ response = client .get (
725+ '/datasets/%d/fittings' % public_dataset .id
726+ )
727+
728+ assert response .status_code == 200
729+ assert response .context ['comparisons' ] == [
730+ (m1 , [fit2_m1v2 , fit1_m1v1 ]),
731+ (m2 , [fit3_m2v ]),
732+ ]
733+
734+ def test_ensure_private_results_are_not_shown (self , client , public_dataset ):
735+ recipes .fittingresult_version .make (
736+ fittingresult__dataset = public_dataset ,
737+ fittingresult__model_version__visibility = 'private' ,
738+ fittingresult__protocol_version__visibility = 'public' ,
739+ fittingresult__fittingspec_version__visibility = 'public' ,
740+ )
741+
742+ recipes .fittingresult_version .make (
743+ fittingresult__dataset = public_dataset ,
744+ fittingresult__model_version__visibility = 'public' ,
745+ fittingresult__protocol_version__visibility = 'private' ,
746+ fittingresult__fittingspec_version__visibility = 'public' ,
747+ )
748+
749+ recipes .fittingresult_version .make (
750+ fittingresult__dataset = public_dataset ,
751+ fittingresult__model_version__visibility = 'public' ,
752+ fittingresult__protocol_version__visibility = 'public' ,
753+ fittingresult__fittingspec_version__visibility = 'private' ,
754+ )
755+
756+ fit = recipes .fittingresult_version .make (
757+ fittingresult__dataset = public_dataset ,
758+ fittingresult__model_version__visibility = 'public' ,
759+ fittingresult__protocol_version__visibility = 'public' ,
760+ fittingresult__fittingspec_version__visibility = 'public' ,
761+ ).fittingresult
762+
763+ response = client .get (
764+ '/datasets/%d/fittings' % public_dataset .id
765+ )
766+
767+ assert response .status_code == 200
768+ assert response .context ['comparisons' ] == [
769+ (fit .model , [fit ]),
770+ ]
0 commit comments