From af06dddbebbc55e5d2b5ec91e35950404bf75c6c Mon Sep 17 00:00:00 2001 From: abutalib-kiwi Date: Tue, 12 Sep 2023 15:03:12 +0530 Subject: [PATCH 1/2] updated coverage file --- .coverage | Bin 86016 -> 86016 bytes coverage-reports/coverage.xml | 781 ++++++++++++++++++++++------------ 2 files changed, 514 insertions(+), 267 deletions(-) diff --git a/.coverage b/.coverage index c5c9742d688286628453e0f8b84e1ae94c05c24b..cfe9abdb0be3e2dbddd74aecf82bf68af4e342d8 100644 GIT binary patch delta 5643 zcmZWtcUVq?#$+-{G@3FqUotUjOtm2B#EhBu6bFrH47{}usQKQzf1LZ04pfrm>33r~yn6?ifpwo2nq1yU3OZLJ1#yKk9+S~_15y1)|QCI z&Ol(X;R9dClidpPz`y&aAD;*$D?WH0quMu%xltCUFcORFXE_qBf__7PM}I@_&>Qti zJx`C&-E>*Ird`y|YM*HDX-Bm`XfJEKwawZZtxhY`^0h2&juxj))W&EdGU42!3QQe^$YP(vima2=@3^iGeRU_39)lYR*MderJuJV)8t$b6e ze6D4y98_LVwkhkCcBNJ+RTe85$}A;DiBLu=c14o=Wh}3hi{&&qPP!#^NiRrS zq)cg+6eXS%H;JucrI;rsi<8ArVL-Sed@Z~tydP3RVs@9l|9P~ZZ@|Z89h$B0%*Iovubw-1Zuf%~9~JdRPnj}hc~_Wy zz~OD!fIEtL{@U4u=7HPqcdNCFyKld5+}w}64XZh|3wLj}`{;lJn4Q;R_gO!9c4e

V{r=>uwUsfO|9-SYF%+1yGuwjPy(}Sy41;;h z)@!kjfq$GH@cZtFaZ;G(nBISNea4q3A_wCiIMQx$4;4c)g`O*&cCt!0L>TxoTY@I9 zoO%C?nKna!aR9S{!TxA=#Y@QhKDs>*5KaflD$^LM8N6+i$8Ok zNo1t-RdmjC6`r?sPO;VrlfIp^GGE-Yatre4fKgb-z~Vf_up2|CTybZ(QB0J_N=jb& zpZhCk?z$dxD+V6czsLUQ+YaPu?bkjpdI($$2hQ)!u!aSeDK2ZHi_C4qo!bf>t-u%1 z8qYA&&x3=%IFuF`d$zF5z(aSr8L+)MweM9?ZvyDwwD+^Y2WK4vqSOdOx5m9UEK&nS z4XJ%duBY7f9n}Lisg4rsD6y6jYg7A9ic$?F)&Nnerl^{tDrzscDhewps-&obq6$Fj z3P9c~K;__7B$ZQgd1~KGc{w2aa;j7*1L#?{_lv<(7O9jnlu`{P6qQg^Oi?iiNktSD zrS@5+LW&9ji3Oa1WS4@}KK%OjB@Q_kChWPO3`q+p&jP9;hoT%nayFgL-h1PeMb4ry z3pj0JCP0_W)IKSLGGnQ1fJk#j`ZcFnhb>7}DL@AA;G^#QckUiC0F(rjk zQz&&VrOpLvfHa2^=TN1yDVm+y7a%25lngXw79h`AseM=9jgyinH3_KrZ#yPBtWq2u z$5F}Y6iufnmZDhLm>vVjKPG1CV8g)GM-5UmortC^(I`~nz>o{Nw9#=YPR!?4!M`7M3uXtfBkgQ`_ zVGR8r!%hu_|Ju-NEp8AK!@sD}kIqWJ;x%jhZ{M=M+W*Oe-xrl`yfNd)*t7d~ziR$m zWFdsghp^$n@V_h=hiwa1gBghZ(J+o5jkRq)88JbCn}dEv{fO!QBC^}7UuAkDT$o05 z;`>WMMbe%A`-PV5Jlo(bY0r#D{U6`9F-*cKrvHq^H4r3&1A|&ZgU`xGdjHh8Y4!2k zUB{5css4Ce+&vO;YA+yHmy?Pc&3G*1WSm1_H?#ZrgO{Z#HiVfmOo7FA#8zZ;BG5OMgW@G|yEud0&yHdKXt~2J5zerKdQQV=5w3584OCIPb)c~xRnX(W-euhW-C@AVT3vZdOG!mJURs5w;e-D&iD5#dfw&DkK3F)N+RYPADUo&?3gIWM;f&Q! z>0Ot{@)N5#Bkw6`=@kz&1vgzOLsK8?^Tgx2JkeyZc>{{ZN4ttq44m#x7{iQ4PKHae zd}%3Rzp>R>d#ok;_j;*zSL@Jx)lbIWJPP}aZQum>XuLk?!LB-FEnl5b0G(xzV3&r zz_bf-)IWXsXF52e1w?c3<)UC7D)0tZeC&rTZ2e&hKf^pK9li8}Cz^wsZZ5!sKlt!D zwVbik817Mgi`*nT5Z<;ma>FZyZJhZrl}RgHdv+J?+(P^;HecMOAfhb#QaZ zO`K6~N_Ab9@W_98qBxUv>%Y9vbU@X7!edP@$)IR4tX_jM@RgfIDE;`%pSB|uX1Xq% zQ^Bu1l(5f#U*wk!?d3u?*%g3%Pz`wcLNebE1qqeVOl+{32aUWn5tZYTTMkr&dv0w< z#klVF9%;D_UKhc9hQ;1wUtZ+?!c}oL%bS*5wvWZ^RCEz-L&3~vPUi~YnFx+CrV?i~ zN+bF_qzcQ!fsjFZ+)*-)xU1URTFRS?>PqV2sCDJ_t#I7TFns#w6dC-Vx^4ah9NCx8 zE*p<}BI9As?YL z6ArNwyWY$omk}DvR%g)3YPM;CU01Ww@zKz_5ZlCV-~3wkb|vCdctQXXJzEg)+LhL0;*%H5}wS22_^Bc zp%hXQj53L=AsgE~^TlJR*08Qf*A)-qtJhTz)4`k?

bk$sRyi!3WhNK4u7VW#qdK8@1<>bESseM3 zE*g9}*cOt`^=u4DM>JfP!#KoT^oBQ@!IqU#!gw9;TAlq4o%^1t45!3jYcxVOK4qW?Ln+E`3bL>%I;o^?s<6 zt;?qyU1*kRQs56h05yOuTl_ROX|fe+7lCMj>4A{bSw|jq@C76y7=;Th3t_ItjMVJW zkXV=J!Z>5do&5umo5he9(2Wm;(MuePUZPmGGJ)&?q_=1T+IG#R{$7oQH|9C=C5y<< z5SqmTUpOzPB)fY!5LXlnA6DV(U4K<;q7jN1*%jg2@ggQd>-%zIgjP;?f>LW2=cQ=Q$+X5`Z`s2Xa;Kn8SLCRNgq3lDE?OsLZtgs*>T ze*W-)s!>%^TeYgZnI?W_OD1QGV8POfWOo>nL@+aF_ze-d!jQ-^>z}NBBpylp>fw5w zNoeNdQ_DFc!`!G}AaWOS;azxxXpYZ~L{X4IBLh(j!~~ReGYO+CVhcj6`Pst<%pzSu zXe63T27*v4S_ri=!Aysp` zep+wV{k1dNS}hDdu{^H^D_<&Wl`--~d7T_CotIWgx_De%CfpVF2qXEAk2xK@CEsv` z0y$iw#$B+Bjqt4la-v!INLDP;NL@5+%|;WSSwKnlTqKZ-(a4UhG}0@09R$M78m*MH zwN`>b7aJNm5`*%QN^8rI80ZS&6_b?~P;w#`*^ms2r%;VFdfNAq#L6j ztH>wQ;SL25^})^y@ha_Y>9yq=yjf03T^v$)4(7qF9;7J4y=|6ZAtebztE-R8bEUzO zkuy*gYas0MVD`{;r-R=yhM#%==5=Q|Ovxv`I-9u;_BNNiKNI$~mKJ#0^XbD2EnGuS z1!-XxZ3=B@wW%5WMCMnSo1%V2eVxtfqqIW`BS(wh_Yp*v@G=0mufQfcIu7^H~I4(MLAlLsr)D;i6DcSM zJxi>q5bPUenM*-YQbN87f;KaOl)aLdosd*8dS*#X=n)_ zVMZ^!k_`8Us{8-%D#LNn#rVhbq;?)!jwX=v^H2dlzKAoD=v&J0tfu{@r5r~h(@{Pj z@>`yvsJa5ZBN~g3Kt@Y^=uW23N6>lF_@`sDo=!lG#FhbBqS?$6Lo58I(xL{M6iQLk MJ0+Qr5>Wg90`WW`O8@`> delta 5368 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 - + @@ -29,7 +29,7 @@ - + @@ -265,7 +265,7 @@ - + @@ -384,26 +384,26 @@ - - - + + + - - - + + + - - + + - + - + - + @@ -569,7 +569,7 @@ - + @@ -713,7 +713,7 @@ - + @@ -721,16 +721,14 @@ - - - - + + + + + - - - @@ -1294,7 +1292,7 @@ - + @@ -1360,7 +1358,7 @@ - + @@ -1372,12 +1370,12 @@ - + - + @@ -1394,11 +1392,11 @@ - - - - - + + + + + @@ -1424,7 +1422,7 @@ - + @@ -1909,7 +1907,7 @@ - + @@ -1937,9 +1935,9 @@ - - - + + + @@ -3860,7 +3858,7 @@ - + @@ -3928,7 +3926,7 @@ - + @@ -3941,9 +3939,9 @@ - - - + + + @@ -3951,7 +3949,7 @@ - + @@ -3962,7 +3960,42 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -3976,7 +4009,7 @@ - + @@ -3993,8 +4026,8 @@ - - + + @@ -4069,7 +4102,7 @@ - + @@ -4089,17 +4122,17 @@ - - - - - + + + + + - - - - + + + + @@ -4108,8 +4141,8 @@ - - + + @@ -4135,7 +4168,7 @@ - + @@ -4219,7 +4252,7 @@ - + @@ -4227,7 +4260,7 @@ - + @@ -4254,7 +4287,7 @@ - + @@ -4281,12 +4314,12 @@ - + - - - + + + @@ -4338,13 +4371,13 @@ - + - + @@ -4362,13 +4395,13 @@ - + - + - + @@ -4379,10 +4412,10 @@ - + - + @@ -4394,27 +4427,27 @@ - + - - + + - - - - + + + + - - + + - - + + @@ -4701,7 +4734,7 @@ - + @@ -4723,34 +4756,34 @@ - + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + @@ -4762,33 +4795,33 @@ - - - - - - - + + + + + + + - - - - - - - + + + + + + + - + - + - + - + @@ -4799,33 +4832,33 @@ - - - - - - - + + + + + + + - - - - - - - + + + + + + + - + - + - + - + @@ -4835,20 +4868,20 @@ - + - - - - - - - - - - - - + + + + + + + + + + + + @@ -4860,6 +4893,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -5050,48 +5130,215 @@ - + + + - - - + + + + - - - - + + + - - - - + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + @@ -5122,72 +5369,72 @@ - - + + - - - - - + + + + + - - - - + + + + - - - - + + + + - - - - - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - + + + + + + @@ -5354,7 +5601,7 @@ - + @@ -5381,54 +5628,54 @@ - - - - - - - + + + + + + + - - - - - + + + + + - - - - - - + + + + + + - - - - - - - - - - - + + + + + + + + + + + - - + + - - - - - - - - + + + + + + + + - - + + From 08f54f28a4d9301bfeca424cd5c48e5ab3417823 Mon Sep 17 00:00:00 2001 From: abutalib-kiwi Date: Tue, 12 Sep 2023 23:08:17 +0530 Subject: [PATCH 2/2] added a test case, updated coverage file --- .coverage | Bin 86016 -> 86016 bytes base/pagination.py | 12 - coverage-reports/coverage.xml | 356 +++++++++--------- notifications/tests.py | 12 +- notifications/utils.py | 30 -- web_admin/serializers/analytics_serializer.py | 2 - web_admin/tests/test_analytics.py | 16 + web_admin/tests/test_set_up.py | 80 ++-- 8 files changed, 253 insertions(+), 255 deletions(-) diff --git a/.coverage b/.coverage index cfe9abdb0be3e2dbddd74aecf82bf68af4e342d8..ad3ab6617849e76cfbb418dc5a98f0bc4a21ebcd 100644 GIT binary patch delta 3420 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 ttB2B|#tMEc;?&1C4*@LaR@m{{tJHG4d(y= delta 3304 zcmY+Gc~I5Y6~}+)w{Pz~(8r=80vganSp_l3?gApaxFI|i5zxo-K#e>8NHm)!K5vq1 zrZwuc(`jpBRT53oNz63KWRi&?i`q6C6cb5Ir>KLO8XKYa{6yRG2lKh#d+xdCoO|#2 zy&Z?79fzc2w~Ea%ogBvnma=~Vu_sCnI$Lz_Lx?q zq(sZZ@=f`i{CoK&d5c^lC(4tK`+pM2 zxLv)%N5^W(KX#SnxGY)ZwQz3NzS)_=NFv9{0hYv+2yW+7@I~cTBxY1TDC$E@{c_fS!d)^;mW6;J7NUK ziLCme9B&ESdt43K^R!i@bua^WN8Zpu#o=QZ=G*_t$j`l9!;0F@hGW|I4+v@-Qd`~- zXsu}7x^d00OKm~11w}84-n^lA6jJ%j#9UCDaH@$-sf|dDjEvQcLRYhuBbPvJK)E4r zC|z5{$h`{J>h%nR>-T>)a#|p7J~Oc^UG<=uCvV89RwGq2QmPmQROJn+D^XgBn^YoI zBCSALfwUZHInpwuWk^ermLe@dT7p!8RKX%q7b7iZnpV!pUEaka0ksU(GPEp3D#iH{ zoG;lwa9Yrc5sR6nODSR)P{aZ&M8iT{vIuDrtDs)MD7XN#zpgGsb>aTc6g3|yA6@1# za_8AQEj5@%|^>C zq%5RNq)em?qzt5Vq;#Y?NOQ2vX-H|PJu0&O$2^KS8^zfy3r8xWu+-G#k+$JWzqF~d zaAFpkq#&g*(vlgulT#0jOweW`&O}s`a6XB}rzRpL;$8_z35>LOG>m7nf)9B& zf8(ipVqnhqvwL6Od(i&V$k9Fiv4N53Ei$SzdP=W$^u}xLJGb6&hI%3wj>^>j44cN#upikU|dsU?-)L&o4U3jSInYoCRXH#1eWGlf9>}yf{Nj z+$vgI{#Q8T`MCaSI0@EUeT(wZM*~Hqy;UaRYm%*6_dXYjF*G<)vpAG*oVz+&RL76?n(Hfves`wCdj@jL_(c92le zlm6pLURr7I<@1!#1JUfD){b6^5_)GUM9EF8|989Wtl|a}pn=p5c7ccV4?YVuq~-cP zb(Mo1Q!MuhQEpWG_cid#VoBhw1@xtS2<(}1^NKU?b4rg5MLJKgd;)$|2N(XH(@74aIgFQtK~JN zB4;fpf!7MLXncJM&5DJ3c}?+snNl6b@tcb1O$9c|YYIp8B061%P~NwQzG8q+t}bAD zHgi*ig%B)QNLy5}_@;bXBD1qemD$T#nQu>{r&I1(29eQgKobmD z%XiGi6{S=Rfk@et$~Md;hc6Uk+I;IQI$}Z_q+qeq|NCUtUx=3Ll9_3~ZTjaMF1~3d z7UQ0c{a*OyB#gG4uqUEeTp|lcvaQ*BleZ+W#arxQ-^HnXeLSAh=;FOjm;`aSws{fW zoG5Ms=UV4-I$w5%I{xUGXP!43jX`6h{)@g#`?t15y{>LogOp>+MEONIN%}x46fcTi zVOUth5AnPCaqwHn=04;$`27#l!3ZekH+SGkq?4>W27Rp%68Tymma&%aY^VMx=;VEE zG&~A?RGbWr^7S4=X#ic+jVFUusx9*6ozn;$e+WMyZ4)496mPR)AFoz{{+9T|0)~u#?r$LQiNe%RP z4D1xFfK@a+2KMsx^>&$<+i1D5j;$)kRfP3XzO5E_XcH{0hQ9j>+j!*Hz+pF<~uQeryGE)`>Y$`Up&sTb7T8)GW6w8^vOF zk2LIAeEm`kqYV27?_Gkad-<*kyvSXA=VC0OeY@SXWFl)1tIC;!Lh4hYh;A2P3=6Rg zLmahXziU!Y2EbE-RH3$VQU2`kQ%A - + @@ -1292,7 +1292,7 @@ - + @@ -1358,7 +1358,7 @@ - + @@ -1371,11 +1371,9 @@ - - - + @@ -1399,25 +1397,25 @@ - - - - - - - - + + + + + + + + - - - - - - - - - + + + + + + + + + @@ -3858,7 +3856,7 @@ - + @@ -3963,39 +3961,41 @@ - + - - - - - - - - - - - + + + + + + + + + + + - - - - - + + + + + - - - + + + - - + + - - + + + + @@ -4009,7 +4009,7 @@ - + @@ -4034,75 +4034,63 @@ - - - - - + + + + + - - - - - - + + + + + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - - + + + + + - + - + - - - - - - - - - - - - - - - - - - - - + + + + + + + + - + @@ -4135,10 +4123,10 @@ - - - - + + + + @@ -4168,7 +4156,7 @@ - + @@ -4287,7 +4275,7 @@ - + @@ -4315,8 +4303,8 @@ - - + + @@ -4371,13 +4359,13 @@ - + - + @@ -4439,15 +4427,14 @@ - - - - + + + + - - - - + + + @@ -4920,24 +4907,31 @@ - - + - - + - + + + - - + + - - - + + + + + + + + + + @@ -5136,75 +5130,75 @@ - - - - - - - + + + + - - - - - - - - - + + + + + + - + + + + + - - - - - - - - - + + + + + + - - - - + + - - - - + + + - - + + + - + + - - - - - + + + + + - - - + + + - - + - + + + + + + + + diff --git a/notifications/tests.py b/notifications/tests.py index 925d5a1..9cec499 100644 --- a/notifications/tests.py +++ b/notifications/tests.py @@ -8,6 +8,7 @@ from fcm_django.models import FCMDevice from django.urls import reverse from rest_framework import status +from account.models import UserNotification # local imports from account.serializers import GuardianSerializer from notifications.models import Notification @@ -25,8 +26,11 @@ class NotificationTestCase(AnalyticsSetUp): """ super(NotificationTestCase, self).setUp() + # notification settings create + UserNotification.objects.create(user=self.user) + # notification create - self.notification = Notification.objects.create(notification_to=self.user) + self.notification = Notification.objects.create(notification_to=self.user, notification_from=self.user_3) # to get guardian/user auth token self.guardian_data = GuardianSerializer( @@ -73,11 +77,11 @@ class NotificationTestCase(AnalyticsSetUp): test send test notification :return: """ - url = reverse('notifications:notifications-list') + url = reverse('notifications:notifications-test') response = self.client.get(url, **self.header) self.assertEqual(response.status_code, status.HTTP_200_OK) - # Assuming only one notification exists in the database - self.assertEqual(Notification.objects.filter(notification_to=self.user).count(), 1) + # Assuming one notification exists in the database and two created after api run + self.assertEqual(Notification.objects.filter(notification_to=self.user).count(), 3) def test_mark_as_read(self): """ diff --git a/notifications/utils.py b/notifications/utils.py index 83e3e95..a118cd7 100644 --- a/notifications/utils.py +++ b/notifications/utils.py @@ -145,33 +145,3 @@ def send_notification_multiple_user(notification_type, from_user_id, from_user_t Notification.objects.bulk_create(notification_list) to_user_list = to_user_list.filter(user_notification__push_notification=True) send_multiple_push(to_user_list, push_data) - - -@shared_task() -def send_notification_to_guardian(notification_type, from_user_id, to_user_id, extra_data): - """ - :param notification_type: - :param from_user_id: - :param to_user_id: - :param extra_data: - :return: - """ - if from_user_id: - from_user = Junior.objects.filter(auth_id=from_user_id).first() - extra_data['from_user_image'] = from_user.image - send_notification(notification_type, from_user_id, to_user_id, extra_data) - - -@shared_task() -def send_notification_to_junior(notification_type, from_user_id, to_user_id, extra_data): - """ - :param notification_type: - :param from_user_id: - :param to_user_id: - :param extra_data: - :return: - """ - if from_user_id: - from_user = Guardian.objects.filter(user_id=from_user_id).first() - extra_data['from_user_image'] = from_user.image - send_notification(notification_type, from_user_id, to_user_id, extra_data) diff --git a/web_admin/serializers/analytics_serializer.py b/web_admin/serializers/analytics_serializer.py index 7871615..cc81f46 100644 --- a/web_admin/serializers/analytics_serializer.py +++ b/web_admin/serializers/analytics_serializer.py @@ -128,8 +128,6 @@ class UserCSVReportSerializer(serializers.ModelSerializer): return dict(USER_TYPE).get('2').capitalize() elif obj.junior_profile.all().first(): return dict(USER_TYPE).get('1').capitalize() - else: - return None @staticmethod def get_is_active(obj): diff --git a/web_admin/tests/test_analytics.py b/web_admin/tests/test_analytics.py index 81ff9b0..02f401e 100644 --- a/web_admin/tests/test_analytics.py +++ b/web_admin/tests/test_analytics.py @@ -49,6 +49,22 @@ class AnalyticsViewSetTestCase(AnalyticsSetUp): # Assuming four users exists in the database self.assertEqual(response.data['data'][0]['signups'], 4) + def test_new_user_sign_ups_between_given_dates(self): + """ + test new user sign-ups + :return: + """ + self.client.force_authenticate(self.admin_user) + url = reverse('web_admin:analytics-new-signups') + query_params = { + 'start_date': '2023-09-12', + 'end_date': '2023-09-13' + } + response = self.client.get(url, query_params) + self.assertEqual(response.status_code, status.HTTP_200_OK) + # Assuming four users exists in the database + self.assertEqual(response.data['data'][0]['signups'], 4) + def test_assign_tasks_report(self): """ test assign tasks report diff --git a/web_admin/tests/test_set_up.py b/web_admin/tests/test_set_up.py index df522cd..f8e2e23 100644 --- a/web_admin/tests/test_set_up.py +++ b/web_admin/tests/test_set_up.py @@ -105,6 +105,8 @@ base64_image = ("data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAoHCBIS "rOORsR8oQkxdazE9A8QostdSBuBFvlKI6PY6ibg0z4VCscJi9WK3WzRiwmRqGHY3vndi5Hnebangse2hrpSHBEAjhE6rXj" "GYdEC/arYms/HtkfAS7huhuDXXJmPEkn5whN4xrZ0NkYdPRpIPdLS0kG5QPdCEskKlYcIWHCEJUO3KFuUIQD3QhCB//Z") +# export excel path and +# export excel url export_excel_path = 'analytics/ZOD_Bank_Analytics.xlsx' export_excel_url = f"https://{settings.ALIYUN_OSS_BUCKET_NAME}.{settings.ALIYUN_OSS_ENDPOINT}/{export_excel_path}" @@ -119,12 +121,17 @@ class BaseSetUp(APITestCase): user data :return: """ + # user and admin email self.user_email = 'user@example.com' self.admin_email = 'admin@example.com' self.client = APIClient() + + # create user self.user = User.objects.create_user(username=self.user_email, email=self.user_email) self.user.set_password('user@1234') self.user.save() + + # create admin self.admin_user = User.objects.create_user(username=self.admin_email, email=self.admin_email, is_staff=True, is_superuser=True) self.admin_user.set_password('admin@1234') @@ -133,22 +140,31 @@ class BaseSetUp(APITestCase): class ArticleTestSetUp(BaseSetUp): """ - test cases data set up for article create, update + test cases data set up + for article create, update, list, retrieve and + remove card, survey and add test card, list test card and + default image upload and list """ def setUp(self): """ set up data for test + create user and admin + create article, article card and article survey and survey options :return: """ super(ArticleTestSetUp, self).setUp() + # create article self.article = Article.objects.create(title="Existing Article", description="Existing Description", is_published=True) + # create article card self.article_card = ArticleCard.objects.create(article=self.article, title="Existing Card 1", description="Existing Card 1 Description") + # create article survey self.article_survey = ArticleSurvey.objects.create(article=self.article, points=5, question="Existing Survey Question 1") + # create article survey options SurveyOption.objects.create(survey=self.article_survey, option="Existing Option 1", is_answer=True) SurveyOption.objects.create(survey=self.article_survey, option="Existing Option 2", is_answer=False) @@ -261,11 +277,12 @@ class ArticleTestSetUp(BaseSetUp): class UserManagementSetUp(BaseSetUp): """ test cases for user management + users count, new sign-ups, """ - def setUp(self) -> None: """ data setup + create new guardian and junior :return: """ super(UserManagementSetUp, self).setUp() @@ -278,8 +295,9 @@ class UserManagementSetUp(BaseSetUp): country_name='India', gender=2, is_verified=True, guardian_code=self.guardian_code_1) - # user 2 + # user 2 email self.user_email_2 = 'user2@yopmail.com' + # create user 2 self.user_2 = User.objects.create_user(username=self.user_email_2, email=self.user_email_2) self.user_2.set_password('user2@1234') self.user_2.save() @@ -289,19 +307,20 @@ class UserManagementSetUp(BaseSetUp): country_name='India', gender=1, is_verified=True, guardian_code=self.guardian_code_2) - # user 3 + # user 3 email self.user_email_3 = 'user3@yopmail.com' + # create user 3 self.user_3 = User.objects.create_user(username=self.user_email_3, email=self.user_email_3) self.user_3.set_password('user3@1234') self.user_3.save() # junior 1 - self.junior = Junior.objects.create(auth=self.user_3, country_code=91, phone='8765887643', - country_name='India', gender=2, is_verified=True, - guardian_code=[self.guardian_code_1]) + self.junior = Junior.objects.create(auth=self.user_3, country_name='India', gender=2, + is_verified=True, guardian_code=[self.guardian_code_1]) - # user 4 + # user 4 email self.user_email_4 = 'user4@yopmail.com' + # create user 4 self.user_4 = User.objects.create_user(username=self.user_email_4, email=self.user_email_4) self.user_4.set_password('user4@1234') self.user_4.save() @@ -315,61 +334,70 @@ class UserManagementSetUp(BaseSetUp): class AnalyticsSetUp(UserManagementSetUp): """ test analytics + task assign report, junior leaderboard """ def setUp(self) -> None: """ test data set up + create task and assigned to junior + create junior points data :return: """ super(AnalyticsSetUp, self).setUp() - # pending tasks + # pending tasks 1 self.pending_task_1 = JuniorTask.objects.create(guardian=self.guardian, junior=self.junior, task_name='Pending Task 1', task_status=1, - due_date='2024-09-12') + due_date='2023-09-12') + # pending tasks 2 self.pending_task_2 = JuniorTask.objects.create(guardian=self.guardian_2, junior=self.junior_2, task_name='Pending Task 2', task_status=1, - due_date='2024-09-12') + due_date='2023-09-12') - # in progress tasks + # in progress tasks 1 self.in_progress_task_1 = JuniorTask.objects.create(guardian=self.guardian, junior=self.junior, task_name='In progress Task 1', task_status=2, - due_date='2024-09-12') + due_date='2023-09-12') + # in progress tasks 2 self.in_progress_task_2 = JuniorTask.objects.create(guardian=self.guardian_2, junior=self.junior_2, task_name='In progress Task 2', task_status=2, - due_date='2024-09-12') + due_date='2023-09-12') - # rejected tasks + # rejected tasks 1 self.rejected_task_1 = JuniorTask.objects.create(guardian=self.guardian, junior=self.junior, task_name='Rejected Task 1', task_status=3, - due_date='2024-09-12') + due_date='2023-09-12') + # rejected tasks 2 self.rejected_task_2 = JuniorTask.objects.create(guardian=self.guardian_2, junior=self.junior_2, task_name='Rejected Task 2', task_status=3, - due_date='2024-09-12') + due_date='2023-09-12') - # requested task + # requested task 1 self.requested_task_1 = JuniorTask.objects.create(guardian=self.guardian, junior=self.junior, task_name='Requested Task 1', task_status=4, - due_date='2024-09-12') + due_date='2023-09-12') + # requested task 2 self.requested_task_2 = JuniorTask.objects.create(guardian=self.guardian_2, junior=self.junior_2, task_name='Requested Task 2', task_status=4, - due_date='2024-09-12') + due_date='2023-09-12') - # completed task + # completed task 1 self.completed_task_1 = JuniorTask.objects.create(guardian=self.guardian, junior=self.junior, task_name='Completed Task 1', task_status=5, - due_date='2024-09-12') + due_date='2023-09-12') + # completed task 2 self.completed_task_2 = JuniorTask.objects.create(guardian=self.guardian_2, junior=self.junior_2, task_name='Completed Task 2', task_status=5, - due_date='2024-09-12') + due_date='2023-09-12') - # expired task + # expired task 1 self.expired_task_1 = JuniorTask.objects.create(guardian=self.guardian, junior=self.junior, task_name='Expired Task 1', task_status=6, - due_date='2024-09-11') + due_date='2023-09-11') + # expired task 2 self.expired_task_2 = JuniorTask.objects.create(guardian=self.guardian_2, junior=self.junior_2, task_name='Expired Task 2', task_status=6, - due_date='2024-09-11') + due_date='2023-09-11') # junior point table data JuniorPoints.objects.create(junior=self.junior_2, total_points=50)