From 7dbbdec295cc9671cbdd2100b6cec5055f9c72e7 Mon Sep 17 00:00:00 2001 From: eric-intuitem <71850047+eric-intuitem@users.noreply.github.com> Date: Wed, 1 May 2024 16:02:30 +0200 Subject: [PATCH 1/3] add score migration for NIST CSF 1.1 - add score scale for NIST CSF 1.1 - add custom migration to fix existing audits --- .../migrations/0011_auto_20240501_1342.py | 44 ++++++++++++++++++ backend/library/libraries/nist-csf-1.1.yaml | 35 +++++++++++++- tools/nist/nist-csf-1.1-en.xlsx | Bin 25686 -> 0 bytes tools/nist/nist-csf-1.1.xlsx | Bin 0 -> 27139 bytes 4 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 backend/core/migrations/0011_auto_20240501_1342.py delete mode 100644 tools/nist/nist-csf-1.1-en.xlsx create mode 100644 tools/nist/nist-csf-1.1.xlsx diff --git a/backend/core/migrations/0011_auto_20240501_1342.py b/backend/core/migrations/0011_auto_20240501_1342.py new file mode 100644 index 000000000..ba95785f3 --- /dev/null +++ b/backend/core/migrations/0011_auto_20240501_1342.py @@ -0,0 +1,44 @@ +# Generated by Django 5.0.4 on 2024-05-01 13:42 +# well-known scores added manually + +from django.db import migrations + + +WELL_KNOWN_SCORES = { + "urn:intuitem:risk:framework:tisax-v6.0.2": (0, 5), + "urn:intuitem:risk:framework:ccb-cff-2023-03-01": (1, 5), + "urn:intuitem:risk:framework:nist-csf-2.0": (1, 4), + "urn:intuitem:risk:framework:nist-csf-1.1": (1, 4), +} + + +def fix_well_known_scores(apps, schema_editor): + Framework = apps.get_model("core", "Framework") + ComplianceAssessment = apps.get_model("core", "ComplianceAssessment") + for framework in Framework.objects.all(): + if framework.urn in WELL_KNOWN_SCORES: + (framework.min_score, framework.max_score) = WELL_KNOWN_SCORES[ + framework.urn + ] + framework.save() + print("custom migration for", framework.urn) + for assessment in ComplianceAssessment.objects.all(): + if assessment.framework.urn in WELL_KNOWN_SCORES: + (assessment.min_score, assessment.max_score) = WELL_KNOWN_SCORES[ + assessment.framework.urn + ] + print("custom migration for", assessment.framework.urn) + else: + # no default value, so fix it now + (assessment.min_score, assessment.max_score) = (0, 100) + assessment.save() + + +class Migration(migrations.Migration): + dependencies = [ + ("core", "0010_rename_score_definition_framework_scores_definition_and_more"), + ] + + operations = [ + migrations.RunPython(fix_well_known_scores), + ] diff --git a/backend/library/libraries/nist-csf-1.1.yaml b/backend/library/libraries/nist-csf-1.1.yaml index 254c9feb5..de2cefa6c 100644 --- a/backend/library/libraries/nist-csf-1.1.yaml +++ b/backend/library/libraries/nist-csf-1.1.yaml @@ -5,7 +5,7 @@ name: NIST CSF version 1.1 description: National Institute of Standards and Technology - Cybersecurity Framework copyright: With the exception of material marked as copyrighted, information presented on NIST sites are considered public information and may be distributed or copied. -version: 1 +version: 2 provider: NIST packager: intuitem objects: @@ -14,6 +14,39 @@ objects: ref_id: NIST-CSF-1.1 name: NIST CSF v1.1 description: NIST Cybersecurity Framework + min_score: 1 + max_score: 4 + scores_definition: + - score: 1 + name: Partial + description: 'Application of the organizational cybersecurity risk strategy + is managed in an ad hoc manner. + + There is limited awareness of cybersecurity risks at the organizational level.' + - score: 2 + name: Risk informed + description: 'Risk management practices are approved by management but may not + be established as organization-wide policy. + + There is an awareness of cybersecurity risks at the organizational level, + but an organization-wide approach to managing cybersecurity risks has not + been established.' + - score: 3 + name: Repeatable + description: "The organization\u2019s risk management practices are formally\ + \ approved and expressed as policy.\nOrganizational cybersecurity practices\ + \ are regularly updated based on the application of risk management processes\ + \ to changes in business/mission requirements, threats, and technological\ + \ landscape." + - score: 4 + name: Adaptive + description: 'There is an organization-wide approach to managing cybersecurity + risks that uses risk-informed policies, processes, and procedures to address + potential cybersecurity events. + + The organization adapts its cybersecurity practices based on previous and + current cybersecurity activities, including lessons learned and predictive + indicators.' requirement_nodes: - urn: urn:intuitem:risk:req_node:nist-csf-1.1:id assessable: false diff --git a/tools/nist/nist-csf-1.1-en.xlsx b/tools/nist/nist-csf-1.1-en.xlsx deleted file mode 100644 index 4b88d346b6a59b1c5c0e1314adeda9274ebf123f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25686 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 diff --git a/tools/nist/nist-csf-1.1.xlsx b/tools/nist/nist-csf-1.1.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..0157cf18a9abb4ff13827176e7816aa42b13a72f GIT binary patch literal 27139 zcmeFYV}K<=v?h4Vwry9JZQHih#V*^n(Pi7NE_d0sZ5v%R)%|w&z1f-BfBS1Df8@=3 z;$-BBbG|R)L`I~7Gzcgv02}}b004*p`s=vEAwU2?DL4Rt0)Pb87Phl>GPQNmS8@Mg z>ZnWSW@Am54+>0~3jqGo|3An7#vT|?mbLnB?7qEVMlxo#g*4^C5i52SO7^=1K9w8XI^I9!$nxN2Tw z*YObFE)|UiKYPMApfwAL7!rN$APzT(Lwl<5k5(TLffSP#3{RTMdfl1T;!Y}KitW{c z=#avUx^lAc@L|_j>MSe@*Aiqzjn592#q=_KE{UB(xGFjDiN{Ow;aNmZN@dPa%k4)L zq^txQPG@Qu3NnE9*d* zLE~?pean6T0xKa6a@4FJj_*({3i=?$ShTPL)Ma(G7spI$w^g;1-UDBN;P$#{CyK)x zR%nQ0+D=S#Aju{-g1z$`SQ|cB{0l9{QKro6b|jGe39S@wljqa?RsRclpPwKAh5wGe zO{xqe_g^J4U+jeWqOZP#skI|L-QV;7q3!?1T>URiuS}4Y?_+=sxsrGf9e!Hah(i>T zb`_LpCsOh8lUzq=iY_3<+32RgMO48K1QGY`^m!j$+u(^l9VU9*WvPrrM&%}HcC89Y zeYJOnpeA=n5wow{=|^%|cvyJ+DK6zs>CzcXUC~;aCq1%7A~ts;QinK2r;ZJUQiL0V z&im6}Yfx5m)9ASxXhBH%qAH}eg+2E)aVo=iDW&)Xjz5f3=6v=i+OVUM`AW6dur<-c z3%07V1?Tr#qihE*Vt0KL>z+H2jBb=aUf<+0hn0v~ke`{R#D~aoAAGeMS#HL%-22&~ z`YML6M*<=VN;khovj34J;&kw5>u}zc~Z+ zHPn6S{_lNsB*{wmGa!as1$^f1+s?T-qpdj66Q8T9Ut`anK&+9HF;_fp;dofk(%vXN zBBx>9PWE|SJo5jN@9Hr$k2Y{muLF&$S2f4(<%_9tm8TUO+41T{%679K!}-BC7@0C z;ErIZ*Zf0&ZPB@8d!W1lTo^;?hqGAytMZec$}ez@C{15cxUSuL( z#Xw&xH+0LN69bn?6d=d$7MB!%r`dBfaZ^aBAQGDau$HhP+Kd0D$7J#0udH zK3^#NulOodv$4zILjBFoXPHPJ z@mn(0+uXnq!jTnGPO1=(HekARn661L7?Mh>KE0H=&InEdn#d~OkSZrmOH#~1m8tj) z+PxYlH~o6>5=qD%I)oBhPLtX~yFu)UFhNx$@TGj8hBbHL9;s1-vwz9f@m3c zXq%;wG2uKo1NX8rp_jV~+C`%m2h-&f6Aq+_t2zj=!!`efdyVI9w__Wv{i@6=e&Lj+ zOtzSMtvqZtm2-(U_8f|KARW(o*d@8K1DMK19CPj1Nc>3q`#~k4O%aB`J`g@?puypb z7)ltDdiqF+1sg^*IKJ(lSLI3PI= z@;OqM!xavDqs-Px6PE1fWoaY&tao5@6GSCJEnV9c!(0+iSQQTBjkpQIUfbo{_lc;S z%SVUt_cexLAFNPWf{r8Ws!cbOl*L1T_BIVy{7(3%E|`xh?p}~7XRH+xU#`syZ^QR8 zP%GXg7?}ZyDGjt0h{eKARxF(uEci-6&qJpT^zl=(iWBO>U1`bvGm?uDm_HkhCMe&x znoTU=6V=_-(cWSeRnN;}9#wcz0=-p5!4zEOakxg{-R2cd7@`s)geHELjXl7&Z;o5k zMt7&KhmG0y}78+1G5l0=Te`Lw7U-OQm`(_wani1?cSHlC-BK;Ku%@yQeGv~w^MUHv((eO z&CP3APBq3ZfrU?(zpFj+Q%~oE71#fRH5bwW9?y7~2b+(P?&E*T$U0HDa~%i(0GR0S z+~yx6oh(dkOzHof8UObB=bF;7IPAz>5W~KNuXJY%RYN`Xc_kE&Q8sQS^bY$HN$L15 z%7kTDF#i5MoCnB+0xor_V2{nAgc5$B8YHRjm>_KRD+G0-F4D3wrEb=-7;+5EJyGee zzOM;n z&z13Q4JL?w-4=zg6TsqI{Vm?9NrVnYfIy+RyZhRmGuxLY}0f-98I_yA;&R+yova-kXwQy;7|nT0)@r@uxz+`_EuOC(U&o9Kl?Wgi~r}9t4j+n8!KA(C!53AY*Y1 zXpCTs_=Ca#{PiU?GeNbu4hA1`4+r0N)q(NQVu1!N+QYaPg&giS(NX14@Dh;gy-rH# z(3sO@jt;HOI!Khfx8sxjDX3ek4&Xv5XVgaqm-&i0lbVNuN>RdhNFMU0@={p}uN!|h zd^=$Z^))FUzgRCd>ZC4FB6yllmXMAn#~;yhh&?n`A(nZo9AbZ7^mlX5xbb@$!%%d~ zwbD+1i9-~M8TUJ&V%dCuMoPwdU4c66K9eCPM47lq{xI9`K})b31a=SMjYyk}PKnZE zch239vn3wHXExTp{(4nrZh6p$Se{Un@z+!`g3s^ES z$(zQBC^&AZLgA1vyUwG$P+XP!_?NRD{DYG#ML9+M`s%;Kw?rQ?&&P)Be$fktbkxBj zz6E0k>Mw~e+N7D8g-ZZZI zZO`+~gT6^du}i>I*~v@hlcG)G&0GwNTZu*tzVHMf>DK-;#$dX!OlHer4qK=Hn$eDj zv$d^93>>QZLrB#Nbq}mDyu7%MGqvrsO$3H6&(kDC_AEJb&c;JwY(GxE0p6miyglnD zH<{Xi8`)}<@Q{@0u~@_Lsm*)_-^sd@(Gs}D3OnQP^l{ewOUC>*{GhP+Y$P+&R3p(f zV^Qe}{ZLE1foPhZMp>2Z2b^AMPl~YLl?|}boRkYCTymO;?s&R*nbOhsbmmOlAi3*$ z<^o73&CSk7xA&*@D(wP=cqElhj?uNV3?ZqzJlq#*@1}#lbc5y@<=c%qaiE#gtDcao zWGRnY{fpR?Yf-bD1H^a(w9}yUoC2_%Vt0(|{nq1O;b0p$b>?J}hS|QxyD=dN)*hxw zTw4hW(lV#ESTis`W}6A)>*P|US*R>B~J#a6cI(NHs7&#ZY7$D<~;nq2XaQG&&=Vp7ChwW-P3hf_V!w!1DpyyV^ICP86JZK5U&hs{K{iSjNqW{+*OSoP2@xpGC9PX2&1*yd6Cmx<>^QQ!Kmx;C~Q$)6dK@AZu9I``^U812X6sF24EVm9;D zEuPUz?VEVXzXfYlEuU~YXLD!l;Kc%c<}G8h!H?(t`fNK1*g~q53RbUDe~XFI7cJ1S z_Gwk&u(ekiE_h5h}xyQAMsjMVNm&chr_zeUo`Q^3ygddxp&!RF#%UrOCIAx=^Kjk;e|(#+?f6 zJHA>VjD3Uai0hasra!OI2?@U~Dx{A{I5`HqGCn9V!E|&aT3)t-4Fh|6_&p0#Ns~I#Tt9rWWq}<#drfqoK!oEFIbg6OyJvDaaKqy+HHU;l+vn@V zL`UkG;}TkL8)$YqE}WToTmj%}fzfqn8W50}#a|^KDe44{+@?hWhpE?o8@T z*7X{TA4>7}BLo)|UFLc(>?v1?a@69-rKo*GK(FY{#d~GfIo`)Y99j#*+ylL4E3~L$ zgI|K3)syU1x1WwWyt;CwhF1N*M$+D|R;kDw&98mUkvxbAnsne@C3A2<~tt0}7 zoBlkwr`E)>Kod`O^L7z-@@ybfI7JA#E`3Sd?TC+BGDmc~H=!s)q_R~*ZW3mS{n~3- zNuKyISx%mlA6klbKKbhE`MfBhC`qK!Vc^4A&n=el9mEZ^Jb|`} zZ1=PIK}QFxH<5pw=l=Fv)$%9a^A}J5uK?6jNyx}Q$kIwpjnk+NOUlyJsWMG7t1D5C z%1rsyN#DZsIlkDa2juYGyrG6=01++N zg`;|%O-n5#p3rdpb(1lMVEseQ>}N9ELzpU!!#sYPT18~5;%e8X{#d0Zp;lR7q`3Ym zeYG*UI5O$(sA5IjWSoE^YRMmO?(t@A{Lz97O@?p&^=!Y|$|~=w5FK3P<&eSL)lBYg z!GAPa^Th`I(AQOWWaZD5@O$SY?VE8*JbUBvrAVkc*s%(_FDvNfkscF*s#nzl{waWW za&aM@?k&&z4mY`&8Vx>xaIg@&6IEteAQ(5GS)J5_mp0kMT$U5GfQG^!Q|ul@apZ$M zka5cLUHrJZMw*y`Pp>GCIGGE1|NiOK81FpxmQ0H$wZ!w_(=k_F`Pj@@P+Vb```hpc zvG>k0*Lpjf2@-#6W~DHG8hx?w!W|(S<}aV`?3KZ7D0ut2vT1YeT2r)Bw;olGQFo%` z4)et#{wYhvRPvDbmmW{*%;s;uV;-vE`p9Z%&?BLKGR*h+%z9swBZ$xyV99}sG;#o+x+iXe2@nik7JAE4RIjm>p7fTOPIE)> zSGf|DT22%{_%*F5)%PloLLLpg%1$|Nbj@5my;a*_HOofvRPl02neT9A!Y$ZZnXNAM z0Kw^0T)D_9h_t+k%&W523ixO5-Q)GK+B}OFd!#Pq+GKE*TdQHgk=Bh`5QeKV_04OA zy+25tNSP-zhIu{PqL93FFxc@&YHa54K;s)wm z|MdSU{sg&_AB~ZZ9`S%liJqg)5mfA^0z0cUshErgx96ZYw9huaLHS5oLH@`wGlfdN znlV6siKKlnuH3cNhHMOy1ztwLEI)8W?eJr$w$M1y4sT5gB8ObzXlwCo-fX~Y(5}kS zLe2_mut+|Cs*d-bmhFkMSewH$w+;4*0fu zOj3mx@fiP|Xi>b_-+0r6uQjNbWU#c#tleiA0;n3-|gFpvY|N zxsa_W+4s1S^6g~Hmy zAh3iP177u6)m^d!^U~-ZHb&bUn{J`_nh&j_h*N;laGe-=BmcU@P3oB2U8_{F;bnZM zF>!R}fF%Vlb|S8L?A5MCJUJ27O)1*=5)VyZE~)2QA%mw3!C4re7#wN-l=%Ld_?gb>xMO&$78@AN|5w_&jRjf0Do8CPd? zd`PIW60vU@o+LUQ0Kd5lsJG>&n&LpeE5Ztb`jrdP1R3Oi=0=9%C|Dd7HpBrILcBul z$5pQym*fLCh{2#W!WLKvJN`f!3PjC5onDzI~gF%lzX-CihpBwdjv5s40F zh5?5e+-dU=OvH|C=_Il6d_#;ifu3B3fkdB)9LVR{g^lSApv#FAb?=7)1cK@EVMN}B zy#&_rLUR7SnqvlsS-;S!3=zjE;2UrNwb|kwCMo_ts29*RYNUwouHOXeo%~hJZC8XY zdL71BHT!!(-!LgOXh%s1D6D%qdjD#zaR)SSMVEGb<)Qfcc?y?q`a^}3Mpw|m^@E;m zWXA_+&!k8$8Vzp<`ThUC^nFS-dM-5ac&@6 zlh728+1>JS@zuUwkb+(HaZK<)6l1}3xYy!(!OJjXx_$PE*H8I>7Xu+svHu_izT?!b z#twPbh$zzr-IY%23S!=Lbb~QI5d}SA)JbmJdft-jL1q~z*+iN(xF!l%->%~}_X@%h zz$VzJ%g=@S&`6HL8fk`|NY(&CJ^7=o@|#zGO>n$Odp!&#VA!B+QQ%wzRWPdioo8U? zH{1pu0q-oyuj$~GPixsLcw!g&n=F|9t~@hdz+qOfqc2*j{6ws9vd?GMx-8VBiv9zu z$AlCxqsocvZ4_UWQR`30-xI08w%$SAqtvk>r`-s9*`A-82T$nChWpVQk<$c2IlFA`?W7GBnIUeGc6Bps zow+|LhgSj0Y6?_z7nsRC|Nk`YndGEiBLB*>0>5TU|BLw$^WO|8Gf_4+T@+$%D zRZ6x-=$xhnr;3|0Udj`G@z(pUcDZ(UDQ6ly_c0Iq#E9`$GP{Hxzv33Q%q z1dINSL^chrJmR7}O|YddC>4I!QPs-y4fP&0hHsMJHytl(;}>`j3Tb0?ZuFDxWEu*b z#ih`kU?g`_UApIc6V4$QOb2#AqtT5;62pY4^iv|H!#}hpDyFdM0J{f zERbjfQ*M?pgN~w?S~h!BHJuJUa-TkHiaMNq-Bpx!9!yun{igz34&3Vt z)z0?jOJVBXYMM>=P1JWWi66NF_rD2oC-9{d%5x7us9&FYL@@l%rM#~6k1GUwwrDjS zA&L~cO%8A}QE`)?ExVLI25`Fq)>-h?QLG!)rS!5=wn3#(rJ?rtq8XrnK9gzfmhQY* z`rw}LpmD;LB!y+&iRssOfM*L|qlO|jrp8$y#|+(A;0}DknF`PP{zJsSQ&OTKd;kM% zaE*`)03wPgu1;i|7*z5(co1oRZA}hDTUg|iQE%?)qDk58_^s@FiCV?l0sguadR>ps z+Dwl+k;ZjcLNm?eR580QzZ@A10^?kH-z>`fZvv1b%}51GKC6NDSgkh8OlkcpZ&qCu zcw88n^FG*Z@&r7}{tRakgWSZxbVSU1s-O3kY6b{UO!jwzq)@Ie>4~)xjDi7j@U!WD z6U|}-5l-uJP{=PhRPG4Tgn|?hR3ub+2%@7c@q|(lNoL$sl93`}%7zq1*ukLI6=u2s zJFk?a5x=boBq(`zcTM7$%1EG@6A*OWKJGieD>)flPObpr5fs{k*7DpsjN()b zJfvg##`0Xqq~;jg;xeLR<)7-Ephg?L2Q{a|<|IFS!3wLas??K+loc{~MTCy}q|ser zdIp}3zO>EKQc;ZuRiG_GTbSUpBuq6!?5oK(cpLn?t7QZZ!^G-F=4KT9r_Uduf80ur zjT?Vt)o=Ely2Qc|pEdndH%!1WGyK*Eo~>{)BqcQ{uI3S7N)RL)Q+wTJy*W~!`?=f4 z_&Y6#2!B8lb28@BiR~NN<&WbCjZ)}WvXPv`^OX9PM%QUOC>&Qd3g74%eo%yrB+ECTRVi+_^b622p124WfgOgGR4|*R11*XD4?HLA@5W={1@1C4Zk_y=Iw-h$%Tu z&et3MgR!T*lB=BToG$M_TkUpN1jjoYW4?TUUVeYR+U)yw`(om6dVgGvJ=OTW-<`Ga z^LcN{e8~5eOm+V`tJzCUoznl<|Kxrz@O1NerA6YC2%Cuh{0#nl8ggu@mXGDn&cWx; zvElPz<6V8fT!FQ4ytfu>wkm5iYAyU%svk2Y>$D} zWnK}xI$jy~Y5r4VPD4bu;zGR!vuM^{dgI&l6JHDGK|6@7#r@`HN7y~!hca$NCHv!q8shTd60$Oq`nJ3-FSd&!)YF9Ekl z;$LC;<-F07W#CK(%t@UMlSji}nbh&Tk>Ck!@clBIq@DeomAA@7rq;O@4TFaj5pT2X ztoFve7Qt*2kbwfO)3fvCijl~ELm*s(6ZPEQ3gmH#a-rvHG|Ok)>@S`9WezN}7_uNc z(#i*7-GhW4{KV=m1~iH9O4(#M=9*oj2_yAi1?LGptYf+BlHV2oi61{Sn)S5U{E(rc(;qjPJ=A^0aAX=OJTe1$dXZUKy(IUfbyW2 zBgkQZrB99vNgn_$IbWw3(*-N{;S?4GfXyf%T1lx+6S6_8T{Fo5$VCECVTp8@FiPC6&|NE@RK`H8&x*SoJa4|OW9ud4lclA;5S+Q`}8bs$#jZl?@aye0zqP@si|m5 z&77q2+Z|7hubIbm(}Jp#bW}t9qqDSonJGa&P^2^32J#-Qw0_I9G&3L{2*m0C^Z%D6 z=yJMU4o1tSfNLf+kgt}ZnVveB{xc2xo)};RulPV|`s)ZUHxYA&y9d6Rr|8i&#++oI zsuQXX2P?b$SS|Goz3)<@MK910AOHe>O!JFuP|}9++!RVL&;**MkSn8o?Sy?m@z<65IrU=c%|{7d}1XE>7Wqka#Yapx+ZIAHSh!P1kR>Fp01 z9F7B=@p1;v*CQu|Shg$k@(qnLYk~S~Q>vCsV#on-hkXi~x_`~;{smkk>4=^WWDbXx z{Ll48Jyx@s!4^H5!Y72MgOVygP!~L8(;G#y~1Y9$9m8j&3_p9C;7s}&mOBqSU-y%fU)S$ zevYwOb@FR177#*gyvuIEtNt`r`SUL%|61C!4uZ{H@@tPb^Q-&o>FCBU*Egln1+yI@ zGxTVj7PQVtAUP>D>P4CXBn^CT$&CCWY@^$38PAyn&YCd60W3y-qo
gurVUlEA> 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

  • v$$5xe@9NuOT{86dqql)9 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 Date: Wed, 1 May 2024 17:22:02 +0200 Subject: [PATCH 2/3] Fix pytest Now score is [1, 4] with nist csf 1.1 and remove debug code --- backend/app_tests/api/test_api_compliance_assessments.py | 4 ++-- backend/library/utils.py | 5 ----- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/backend/app_tests/api/test_api_compliance_assessments.py b/backend/app_tests/api/test_api_compliance_assessments.py index fe31ea063..29982009c 100644 --- a/backend/app_tests/api/test_api_compliance_assessments.py +++ b/backend/app_tests/api/test_api_compliance_assessments.py @@ -124,8 +124,8 @@ def test_get_compliance_assessments(self, test): "framework": { "id": str(Framework.objects.all()[0].id), "str": str(Framework.objects.all()[0]), - "min_score": 0, - "max_score": 100, + "min_score": 1, + "max_score": 4, }, }, user_group=test.user_group, diff --git a/backend/library/utils.py b/backend/library/utils.py index 5ec9da18e..66a737df2 100644 --- a/backend/library/utils.py +++ b/backend/library/utils.py @@ -315,11 +315,6 @@ def import_framework(self, library_object: Library): default_locale=library_object.default_locale, # Change this in the future ? is_published=True, ) - print("framework_object1", self.framework_data.get("scores_definition")) - print( - "framework_object2", - self.framework_data.get("implementation_groups_definition"), - ) for requirement_node in self._requirement_nodes: requirement_node.import_requirement_node(framework_object) From 4eaa22baa0f1d97b2d2ebac659506bb6bac69991 Mon Sep 17 00:00:00 2001 From: eric-intuitem <71850047+eric-intuitem@users.noreply.github.com> Date: Wed, 1 May 2024 20:24:51 +0200 Subject: [PATCH 3/3] Update test_api_requirement_assessments.py fix pytest (score now between 1 and 4) --- backend/app_tests/api/test_api_requirement_assessments.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/app_tests/api/test_api_requirement_assessments.py b/backend/app_tests/api/test_api_requirement_assessments.py index 6f7c172c1..94523616c 100644 --- a/backend/app_tests/api/test_api_requirement_assessments.py +++ b/backend/app_tests/api/test_api_requirement_assessments.py @@ -202,7 +202,7 @@ def test_update_requirement_assessments(self, test): "compliance_assessment": str(compliance_assessment2.id), "requirement": str(RequirementNode.objects.all()[1].id), "applied_controls": [str(applied_control.id)], - "score": 50, + "score": 3, }, { "folder": {"id": str(test.folder.id), "str": test.folder.name},