11import uuid
22
3- from factory .declarations import Sequence , SubFactory
3+ from factory .declarations import RelatedFactory , Sequence , SubFactory , Trait
44from factory .django import DjangoModelFactory , FileField
5+ from factory .helpers import post_generation
6+
7+ from manage_breast_screening .users .tests .factories import UserFactory
58
69from .. import models
710
@@ -17,6 +20,22 @@ class Meta:
1720 description = "Test Study"
1821
1922
23+ class StudyWithImagesFactory (StudyFactory ):
24+ class Meta :
25+ skip_postgeneration_save = True
26+
27+ @post_generation
28+ def num_images (obj , created , extracted , ** kwargs ):
29+ if not created :
30+ return
31+
32+ if not extracted :
33+ extracted = 1
34+
35+ for _ in range (extracted ):
36+ ImageFactory (series__study = obj )
37+
38+
2039class SeriesFactory (DjangoModelFactory ):
2140 class Meta :
2241 model = models .Series
@@ -37,3 +56,62 @@ class Meta:
3756 laterality = "L"
3857 view_position = "CC"
3958 image_file = FileField (filename = "image.jpg" )
59+
60+
61+ class RecallForAssessmentDetailsFactory (DjangoModelFactory ):
62+ class Meta :
63+ model = models .RecallForAssessmentDetails
64+
65+ right_breast_opinion = models .BreastOpinions .ABNORMAL
66+ left_breast_opinion = models .BreastOpinions .NORMAL
67+
68+
69+ class RetakeRequestFactory (DjangoModelFactory ):
70+ class Meta :
71+ model = models .RetakeRequest
72+
73+ laterality = "R"
74+ view_position = "MLO"
75+
76+
77+ class ReadingFactory (DjangoModelFactory ):
78+ class Meta :
79+ model = models .Reading
80+ skip_postgeneration_save = True
81+
82+ study = SubFactory (StudyWithImagesFactory )
83+ reader = SubFactory (UserFactory )
84+ opinion = models .Opinions .NORMAL
85+
86+ class Params :
87+ normal = Trait (opinion = models .Opinions .NORMAL )
88+ technical_recall = Trait (
89+ opinion = models .Opinions .TECHNICAL_RECALL ,
90+ retake_request_1 = RelatedFactory (
91+ RetakeRequestFactory , factory_related_name = "reading"
92+ ),
93+ )
94+ recall = Trait (
95+ opinion = models .Opinions .RECALL ,
96+ recall_for_assessment_details = RelatedFactory (
97+ RecallForAssessmentDetailsFactory , factory_related_name = "reading"
98+ ),
99+ )
100+
101+
102+ class ReadingSessionItemFactory (DjangoModelFactory ):
103+ class Meta :
104+ model = models .ReadingSessionItem
105+
106+ study = SubFactory (StudyFactory )
107+ order = Sequence (lambda i : i )
108+
109+
110+ class ReadingSessionFactory (DjangoModelFactory ):
111+ class Meta :
112+ model = models .ReadingSession
113+ skip_postgeneration_save = True
114+
115+ reader = SubFactory (UserFactory )
116+ session_size = 50
117+ item_1 = RelatedFactory (ReadingSessionItemFactory , factory_related_name = "session" )
0 commit comments