@@ -3788,26 +3788,101 @@ def __init__(self, *args, **kwargs):
37883788 def __del__ (self : object ):
37893789 self .payload ["file" ].close ()
37903790
3791+ def _build_payload (self , data ):
3792+ return {
3793+ "product" : 1 ,
3794+ "file" : SimpleUploadedFile (
3795+ "defectdojo_cloc.json" ,
3796+ json .dumps (data ).encode ("utf-8" ),
3797+ content_type = "application/json" ,
3798+ ),
3799+ }
3800+
37913801 def test_create (self ):
3792- BaseClass .CreateRequestTest .test_create (self )
3802+ self .payload ["file" ].close ()
3803+ base_data = json .loads (
3804+ Path ("unittests/files/defectdojo_cloc.json" ).read_text (
3805+ encoding = "utf-8" ,
3806+ ),
3807+ )
3808+ updated_data = json .loads (json .dumps (base_data ))
3809+ updated_data .pop ("JSON" , None )
3810+ updated_data ["Python" ]["code" ] = 51057
3811+ updated_data ["Go" ] = {
3812+ "nFiles" : 1 ,
3813+ "blank" : 2 ,
3814+ "comment" : 3 ,
3815+ "code" : 4 ,
3816+ }
37933817
3794- languages = Languages .objects .filter (product = 1 ).order_by ("language" )
3818+ test_cases = [
3819+ (
3820+ "initial" ,
3821+ base_data ,
3822+ {
3823+ "JSON" : {
3824+ "files" : 21 ,
3825+ "blank" : 7 ,
3826+ "comment" : 0 ,
3827+ "code" : 63996 ,
3828+ },
3829+ "Python" : {
3830+ "files" : 432 ,
3831+ "blank" : 10813 ,
3832+ "comment" : 5054 ,
3833+ "code" : 51056 ,
3834+ },
3835+ },
3836+ ),
3837+ (
3838+ "updated" ,
3839+ updated_data ,
3840+ {
3841+ "Go" : {
3842+ "files" : 1 ,
3843+ "blank" : 2 ,
3844+ "comment" : 3 ,
3845+ "code" : 4 ,
3846+ },
3847+ "Python" : {
3848+ "files" : 432 ,
3849+ "blank" : 10813 ,
3850+ "comment" : 5054 ,
3851+ "code" : 51057 ,
3852+ },
3853+ },
3854+ ),
3855+ ]
37953856
3796- self .assertEqual (2 , len (languages ))
3857+ product = Product .objects .get (id = 1 )
3858+ for case_name , payload_data , expected in test_cases :
3859+ with self .subTest (case = case_name ):
3860+ self .payload = self ._build_payload (payload_data )
3861+ response = self .client .post (self .url , self .payload )
3862+ self .assertEqual (201 , response .status_code , response .content [:1000 ])
3863+ self .check_schema_response ("post" , "201" , response )
37973864
3798- self . assertEqual ( languages [ 0 ]. product , Product . objects . get ( id = 1 ))
3799- self . assertEqual ( languages [ 0 ]. language , Language_Type .objects .get ( id = 1 ) )
3800- self . assertEqual ( languages [ 0 ]. files , 21 )
3801- self . assertEqual ( languages [ 0 ]. blank , 7 )
3802- self . assertEqual ( languages [ 0 ]. comment , 0 )
3803- self .assertEqual (languages [ 0 ]. code , 63996 )
3865+ languages = (
3866+ Languages .objects .filter ( product = 1 )
3867+ . select_related ( "language" )
3868+ . order_by ( "language__language" )
3869+ )
3870+ self .assertEqual (len ( expected ), languages . count () )
38043871
3805- self .assertEqual (languages [1 ].product , Product .objects .get (id = 1 ))
3806- self .assertEqual (languages [1 ].language , Language_Type .objects .get (id = 2 ))
3807- self .assertEqual (languages [1 ].files , 432 )
3808- self .assertEqual (languages [1 ].blank , 10813 )
3809- self .assertEqual (languages [1 ].comment , 5054 )
3810- self .assertEqual (languages [1 ].code , 51056 )
3872+ languages_by_name = {
3873+ language .language .language : language
3874+ for language in languages
3875+ }
3876+ self .assertEqual (set (expected .keys ()), set (languages_by_name .keys ()))
3877+
3878+ for name , counts in expected .items ():
3879+ language = languages_by_name [name ]
3880+ self .assertEqual (product , language .product )
3881+ self .assertEqual (name , language .language .language )
3882+ self .assertEqual (counts ["files" ], language .files )
3883+ self .assertEqual (counts ["blank" ], language .blank )
3884+ self .assertEqual (counts ["comment" ], language .comment )
3885+ self .assertEqual (counts ["code" ], language .code )
38113886
38123887
38133888@versioned_fixtures
0 commit comments