From 39b608ed1334200cd3b300c1219de1337314017e Mon Sep 17 00:00:00 2001 From: Lucas Santos Nascimento Date: Thu, 30 Oct 2025 18:35:38 -0300 Subject: [PATCH 1/5] =?UTF-8?q?feat:=20Adiciona=20testes=20unit=C3=A1rios?= =?UTF-8?q?=20para=20as=20fun=C3=A7=C3=B5es=20de=20utils?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/__pycache__/__init__.cpython-313.pyc | Bin 157 -> 166 bytes backend/api/__pycache__/admin.cpython-313.pyc | Bin 579 -> 588 bytes backend/api/__pycache__/apps.cpython-313.pyc | Bin 515 -> 524 bytes .../api/__pycache__/models.cpython-313.pyc | Bin 5664 -> 5673 bytes .../__pycache__/serializers.cpython-313.pyc | Bin 4567 -> 4576 bytes backend/api/__pycache__/urls.cpython-313.pyc | Bin 1403 -> 1412 bytes backend/api/__pycache__/utils.cpython-313.pyc | Bin 1950 -> 1959 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 168 -> 177 bytes .../0025_alter_sign_id_alter_video_id.py | 24 +++++++++ .../__pycache__/0001_initial.cpython-313.pyc | Bin 5866 -> 5875 bytes ...ter_sign_id_alter_video_id.cpython-313.pyc | Bin 1172 -> 1181 bytes ...ter_sign_id_alter_video_id.cpython-313.pyc | Bin 1406 -> 1415 bytes ...ter_sign_id_alter_video_id.cpython-313.pyc | Bin 1217 -> 1226 bytes ...ter_sign_id_alter_video_id.cpython-313.pyc | Bin 1193 -> 1202 bytes ...ter_sign_id_alter_video_id.cpython-313.pyc | Bin 1193 -> 1202 bytes ...stomuser_username_and_more.cpython-313.pyc | Bin 1461 -> 1470 bytes ...ter_sign_id_alter_video_id.cpython-313.pyc | Bin 1200 -> 1209 bytes ...ter_sign_id_alter_video_id.cpython-313.pyc | Bin 1193 -> 1202 bytes ...ter_sign_id_alter_video_id.cpython-313.pyc | Bin 1193 -> 1202 bytes ...ter_sign_id_alter_video_id.cpython-313.pyc | Bin 1193 -> 1202 bytes ...ter_sign_id_alter_video_id.cpython-313.pyc | Bin 1193 -> 1202 bytes ...ter_sign_id_alter_video_id.cpython-313.pyc | Bin 1193 -> 1202 bytes ...ter_sign_id_alter_video_id.cpython-313.pyc | Bin 1193 -> 1202 bytes ...ter_sign_id_alter_video_id.cpython-313.pyc | Bin 1193 -> 1202 bytes ...ter_sign_id_alter_video_id.cpython-313.pyc | Bin 1193 -> 1202 bytes ...ter_sign_id_alter_video_id.cpython-313.pyc | Bin 1193 -> 1202 bytes ...ter_sign_id_alter_video_id.cpython-313.pyc | Bin 1379 -> 1388 bytes ...id_alter_video_id_and_more.cpython-313.pyc | Bin 1459 -> 1468 bytes ...ter_sign_id_alter_video_id.cpython-313.pyc | Bin 1202 -> 1211 bytes ...ter_sign_id_alter_video_id.cpython-313.pyc | Bin 1193 -> 1202 bytes ...ter_sign_id_alter_video_id.cpython-313.pyc | Bin 1193 -> 1202 bytes ...ter_sign_id_alter_video_id.cpython-313.pyc | Bin 1193 -> 1202 bytes ...ter_sign_id_alter_video_id.cpython-313.pyc | Bin 1193 -> 1202 bytes ...ter_sign_id_alter_video_id.cpython-313.pyc | Bin 0 -> 1202 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 168 -> 177 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 163 -> 172 bytes .../unit/__pycache__/__init__.cpython-313.pyc | Bin 168 -> 177 bytes .../__pycache__/test_utils.cpython-313.pyc | Bin 170 -> 2527 bytes backend/api/tests/unit/test_utils.py | 49 ++++++++++++++++++ .../__pycache__/__init__.cpython-313.pyc | Bin 163 -> 172 bytes .../__pycache__/auth_views.cpython-313.pyc | Bin 1524 -> 1533 bytes .../__pycache__/sign_views.cpython-313.pyc | Bin 3326 -> 3335 bytes .../__pycache__/user_views.cpython-313.pyc | Bin 5669 -> 5678 bytes .../__pycache__/video_views.cpython-313.pyc | Bin 4800 -> 4809 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 161 -> 170 bytes .../__pycache__/settings.cpython-313.pyc | Bin 3276 -> 3285 bytes .../backend/__pycache__/urls.cpython-313.pyc | Bin 1119 -> 1128 bytes .../backend/__pycache__/wsgi.cpython-313.pyc | Bin 649 -> 658 bytes backend/db.sqlite3 | Bin 167936 -> 167936 bytes 49 files changed, 73 insertions(+) create mode 100644 backend/api/migrations/0025_alter_sign_id_alter_video_id.py create mode 100644 backend/api/migrations/__pycache__/0025_alter_sign_id_alter_video_id.cpython-313.pyc diff --git a/backend/api/__pycache__/__init__.cpython-313.pyc b/backend/api/__pycache__/__init__.cpython-313.pyc index 4337d295b2574678bfc19b792ea4831d1d21c132..f02d13be90b428b4b21e587fd5305d8dbfa79508 100644 GIT binary patch delta 83 zcmbQsxQvnKGcPX}0}xDF$DBEl$H>~%*(xTqIJKxaCZ{wxIWfj1zdSD|KQW~^CZH%k lE43uQINmTOI5R!ZIVZ8WI3_7EIXg8kB_^>TGiG9eE&yX19U}k$ delta 74 zcmZ3+IG2&Qh2b4Fr`eo|s`c4}UVequqU{=`aM0GXi~!2kdN diff --git a/backend/api/__pycache__/admin.cpython-313.pyc b/backend/api/__pycache__/admin.cpython-313.pyc index 72171d12b7d931a0a5c3a2cf4ab5e5bce58002fc..b0d80ae452ae8369db30fbe67d213d694d3ad984 100644 GIT binary patch delta 86 zcmX@ia)yQXGcPX}0}xDF$DH|pBkx2;YbR%`n9$>0#mh%*)Hg00fiPF=tNL$ZN@H?dWV36Iz^FR2-92nw*>%;Fl$e~InwJujSdbYrxq`790IM|~6aWAK delta 77 zcmeBSX=dU5%*)Hg00jRx9?0n0$ZN@HWTBstpPQ;*mYZK%l&J5VpOUIyP?VpQnp{$> f?~|ESl<1t1SfZbln4F!Om!h9okf}epk+B;9+JYLa diff --git a/backend/api/__pycache__/models.cpython-313.pyc b/backend/api/__pycache__/models.cpython-313.pyc index e4392a0b892c9cdb846ccfb92e6311960448b94c..09004bbdfa9af150d2a98730ef92dd98b655fe3a 100644 GIT binary patch delta 87 zcmZ3Wvr>omGcPX}0}xDF$DEn5kyn|;+S%DECbT%Us5mC4G&wmj#wEWzFDE}Sr8p*_ pC_gK;B)>S`FeW%NJ+Bn9<~4g delta 78 zcmZ3fvp|RUGcPX}0}w>7yPLtdkyn|;$VxvWKQ~psEH}TjC{f=zKP6SapeR2pHMyi% g-zPJvDA741u|z*9F*!RmFGWAGAX9&HHp@Oi0M}m{V*mgE diff --git a/backend/api/__pycache__/serializers.cpython-313.pyc b/backend/api/__pycache__/serializers.cpython-313.pyc index c3aeadfd8f45c6cf9c51a9806b34f31038274e7f..259e1387416e9f2d595e35973d53282be2e8db09 100644 GIT binary patch delta 87 zcmcbv{6LxaGcPX}0}xDF$DFx!BkwyFYY%6un9$AL0N2 delta 78 zcmaE$d|jFMGcPX}0}w>7yPHwHk@p>ok-dIKer~FMS#Ex5QKG(ceoCr-K~a8IYH~@j gzE5USQKEB3Vu^lIVsdtBUW$HVL8ks@GuBl+06tM0yZ`_I diff --git a/backend/api/__pycache__/urls.cpython-313.pyc b/backend/api/__pycache__/urls.cpython-313.pyc index e938ddbdc1c36d2e5bc84d62d2b6cfc6eecd9e5d..3e6c101dbd27a17f2b03043f706a45b5db426400 100644 GIT binary patch delta 87 zcmey()xypDnU|M~0SG3oW6s>Zkynew+R@o6CbT%Us5mC4G&wmj#wEWzFDE}Sr8p*_ pC_gK;B)>S`FeW%NJ{bvnU|M~0SLq{Fl5fz$g9O-WTBstpPQ;*mYZK%l&J5VpOUIyP?VpQnp{$> g?~|ESl<1t1SfZbln4F!Om!h9okg319h((AI0Jz&3LI3~& diff --git a/backend/api/__pycache__/utils.cpython-313.pyc b/backend/api/__pycache__/utils.cpython-313.pyc index 85027c258996770599ca42fa4115b4245403c3b2..a77366d68fbd7d5ca70e7b444d53ddce647e83b4 100644 GIT binary patch delta 87 zcmbQoznq`t@V10U7^ delta 78 zcmZ3^KaZdHGcPX}0}w>7yPI)zBkxQ`BTM~^{M=OivfTXAqC|b?{FGGvf};Ga)Z~(4 heV@#vqD1G6#1j3a#N_PMycGS!f=vC*4;hcK0ss$V8_ECx diff --git a/backend/api/management/__pycache__/__init__.cpython-313.pyc b/backend/api/management/__pycache__/__init__.cpython-313.pyc index 07bfd4a302fbba0c59bdff5c06598be524f5a18c..0f390711c16ab920f14d3fd8de08237ea630db81 100644 GIT binary patch delta 93 zcmZ3%xRH_jGcPX}0}xDF$2^hS*e$@>DkiizwWv5Ir!+Y^F~%joJTE6dF{L;rpeR2p vwIshd-Y_OOGd<5aC$YFVCMhvFJ2fvQCb1whCO0uJF+DXmHLoOQVzn*+sW%~M delta 84 zcmdnUxPp=UGcPX}0}v>2Gfd<*wsqIf$j?pHFU!p@ElSjP&QD3zFDS~-N=+^)*7wOw mDoS+DNG#D$N=(j9%}dcwEXdT)P0UM7Pt8ruE770Wq6+{VNE?^{ diff --git a/backend/api/migrations/0025_alter_sign_id_alter_video_id.py b/backend/api/migrations/0025_alter_sign_id_alter_video_id.py new file mode 100644 index 0000000..4ce43a7 --- /dev/null +++ b/backend/api/migrations/0025_alter_sign_id_alter_video_id.py @@ -0,0 +1,24 @@ +# Generated by Django 5.2.5 on 2025-10-30 18:42 + +import uuid +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('api', '0024_alter_sign_id_alter_video_id'), + ] + + operations = [ + migrations.AlterField( + model_name='sign', + name='id', + field=models.UUIDField(default=uuid.UUID('cc38ed65-ae25-498a-9d5f-04bc81c0bb6a'), editable=False, primary_key=True, serialize=False, unique=True), + ), + migrations.AlterField( + model_name='video', + name='id', + field=models.UUIDField(default=uuid.UUID('75b5f668-9053-4e99-817a-fe592d8f973f'), editable=False, primary_key=True, serialize=False, unique=True), + ), + ] diff --git a/backend/api/migrations/__pycache__/0001_initial.cpython-313.pyc b/backend/api/migrations/__pycache__/0001_initial.cpython-313.pyc index a2c88889b805067d0025cac1ec95be112ee1fcf0..42a9bfadbff5d47a275f27426042583a70043dfc 100644 GIT binary patch delta 98 zcmaE*`&pOwGcPX}0}xDF$DH|PBd@TaTZpq&OlWaxQE^O8X>xL6j7xrbUQT{uN^wj; zQGQlxNq%v>VN7sldY*GmVsUXyQetv;YFVo7FxUUAIkSixRa0K{J; ARR910 delta 89 zcmeyY`%0JhGcPX}0}uo=-p*LNkylvI)>}U#KQ~psEH}TjC{f=zKP6SapeR2pHMyi% r-zPJvDA741u|z*9F*!RmFGWAGAX7g#GrcIWBr`v+SbuYxU@t2GN>v{| diff --git a/backend/api/migrations/__pycache__/0002_alter_sign_id_alter_video_id.cpython-313.pyc b/backend/api/migrations/__pycache__/0002_alter_sign_id_alter_video_id.cpython-313.pyc index a345b9256a4c71762092aa2b1ee71a8f071cbd25..ff9116afe53025e3b419ded80874c0b215713877 100644 GIT binary patch delta 98 zcmbQjIhT|7GcPX}0}xDF$DH|hBkw;Zw@hcNn9$jW*xL6j7xrbUQT{uN^wj; zQGQlxNq%v>VN7sldY*GmVsUXyQetv;YFVo7FxUUAIk&&=J70K3{G A+5i9m delta 89 zcmZqY{>R1pnU|M~0SJN_Z)Y6d$h(r+wp>3WKQ~psEH}TjC{f=zKP6SapeR2pHMyi% r-zPJvDA741u|z*9F*!RmFGWAGAX7g#GrcIWBr`v+Sby^$=59s+Oot!s diff --git a/backend/api/migrations/__pycache__/0004_alter_sign_id_alter_video_id.cpython-313.pyc b/backend/api/migrations/__pycache__/0004_alter_sign_id_alter_video_id.cpython-313.pyc index c084d0b8fb3cbf2286cb399e35ff02530fbb2d93..133c04079cdd31354d50f85359cbb0ffe2627037 100644 GIT binary patch delta 98 zcmX@ed5V+wGcPX}0}xDF$DFCTkyne^Ez{X5CbT%Us5mC4G&wmj#wEWzFDE}Sr8p*_ zC_gK;B)>S`FeW%NJ r?~|ESl<1t1SfZbln4F!Om!h9okg1=WnO>Awl9``ZtiQRI*_ROj@lhS? diff --git a/backend/api/migrations/__pycache__/0005_alter_sign_id_alter_video_id.cpython-313.pyc b/backend/api/migrations/__pycache__/0005_alter_sign_id_alter_video_id.cpython-313.pyc index 2ab2df59cc63c8f2a15d7742e42eb2d0d2e1b0e8..f5cc388f78553e9ec59732118a78d4ab41eddf92 100644 GIT binary patch delta 99 zcmZ3b>K zSl=fzsVLDoBe6t3DKR-aH7`X!u^>}FH#5B`u_QA;uUOx}z`%6!Mn>7q?abPY03Z+` AqW}N^ diff --git a/backend/api/migrations/__pycache__/0006_alter_sign_id_alter_video_id.cpython-313.pyc b/backend/api/migrations/__pycache__/0006_alter_sign_id_alter_video_id.cpython-313.pyc index 3890367a68becc53eb045da2bba3f6cf84ccd7df..ef5953e54c4262cf6aefc3d29a644f123f6af82a 100644 GIT binary patch delta 99 zcmZ3b>K zSl=fzsVLDoBe6t3DKR-aH7`X!u^>}FH#5B`u_QA;uUOx}z`$(sMn>7q?abPY03aG5 AqyPW_ diff --git a/backend/api/migrations/__pycache__/0007_remove_customuser_username_and_more.cpython-313.pyc b/backend/api/migrations/__pycache__/0007_remove_customuser_username_and_more.cpython-313.pyc index 2b58b77ae64efca6142c6213227c626505f3d90b..5c3044194624af0aa104c3c256c985fe01f85c73 100644 GIT binary patch delta 98 zcmdnWy^ovsGcPX}0}xDF$DC=uk@ps}TYxL6j7xrbUQT{uN^wj; zQGQlxNq%v>VN7sldY*GmVsUXyQetv;YFVo7FxUUAH36_$yN0Er1B AfdBvi delta 89 zcmdnTy_K8yGcPX}0}uo=-p-KQ$a{;~HeEj>KQ~psEH}TjC{f=zKP6SapeR2pHMyi% r-zPJvDA741u|z*9F*!RmFGWAGAX7g#GrcIWBr`v+SbwuF%S1*19<3gb diff --git a/backend/api/migrations/__pycache__/0008_alter_sign_id_alter_video_id.cpython-313.pyc b/backend/api/migrations/__pycache__/0008_alter_sign_id_alter_video_id.cpython-313.pyc index 90730cdb0908888cbccef96fb2778e802610ce4d..fece724f36bc7e428fec727446bf5de1928eced6 100644 GIT binary patch delta 98 zcmdnMxs#LkGcPX}0}xDF$DAp-kynb@Ez{X5CbT%Us5mC4G&wmj#wEWzFDE}Sr8p*_ zC_gK;B)>S`FeW%NJ r?~|ESl<1t1SfZbln4F!Om!h9okg1=WnO>Awl9``ZtiL&z*@qDT+>afY diff --git a/backend/api/migrations/__pycache__/0009_alter_sign_id_alter_video_id.cpython-313.pyc b/backend/api/migrations/__pycache__/0009_alter_sign_id_alter_video_id.cpython-313.pyc index c0ea064f684997a450f55e10068f638e69eca63a..7af3afbe91f31bb99da18383c5d551e8facc3a0e 100644 GIT binary patch delta 99 zcmZ3b>K zSl=fzsVLDoBe6t3DKR-aH7`X!u^>}FH#5B`u_QA;uUOx}z`%0yMn>7q?abPY03bLZ ArvLx| diff --git a/backend/api/migrations/__pycache__/0010_alter_sign_id_alter_video_id.cpython-313.pyc b/backend/api/migrations/__pycache__/0010_alter_sign_id_alter_video_id.cpython-313.pyc index 0e777fbc089df06d6c13828377ac8ac38ca2e7cd..48724766edb3841609d63b75371cbfd46720e61e 100644 GIT binary patch delta 99 zcmZ3b>K zSl=fzsVLDoBe6t3DKR-aH7`X!u^>}FH#5B`u_QA;uUOx}z|dgwMn>7q?abPY03Ycf Ap8x;= diff --git a/backend/api/migrations/__pycache__/0011_alter_sign_id_alter_video_id.cpython-313.pyc b/backend/api/migrations/__pycache__/0011_alter_sign_id_alter_video_id.cpython-313.pyc index 7bd2fb5e57ee230dae38f12b821d9749036b458b..827cab956f229cfb3b7b6dbd134a9714154c9d7c 100644 GIT binary patch delta 99 zcmZ3b>K zSl=fzsVLDoBe6t3DKR-aH7`X!u^>}FH#5B`u_QA;uUOx}z|e5=Mn>7q?abPY03Y)p Apa1{> diff --git a/backend/api/migrations/__pycache__/0012_alter_sign_id_alter_video_id.cpython-313.pyc b/backend/api/migrations/__pycache__/0012_alter_sign_id_alter_video_id.cpython-313.pyc index 65fb31bd39042136e176b11000e04469b799873d..10162bb435d91f5af6ba6ba5209d4abcea765929 100644 GIT binary patch delta 99 zcmZ3b>K zSl=fzsVLDoBe6t3DKR-aH7`X!u^>}FH#5B`u_QA;uUOx}z|d&&Mn>7q?abPY03ZDz Ap#T5? diff --git a/backend/api/migrations/__pycache__/0013_alter_sign_id_alter_video_id.cpython-313.pyc b/backend/api/migrations/__pycache__/0013_alter_sign_id_alter_video_id.cpython-313.pyc index 1c1169ab6c0c7d2f21563744cf4a0810e7f64067..a15d273c626e83f6dc376bc32debea91f13caae5 100644 GIT binary patch delta 99 zcmZ37yPNTgX(OKyvtxpOMt*LpepzmQX;GrSbAC#yenC-wR%&ud zvA$1cQc(dVnL>UZf1H>Vo7FxUa`J`fuZr_jf}FJ+nKc)0bCg& ASpWb4 diff --git a/backend/api/migrations/__pycache__/0014_alter_sign_id_alter_video_id.cpython-313.pyc b/backend/api/migrations/__pycache__/0014_alter_sign_id_alter_video_id.cpython-313.pyc index 9969ddf375d729b001683601971b406e16073cdb..7f89498e0027d7e459e7237183255a8aadaeccfb 100644 GIT binary patch delta 99 zcmZ37yPNTgX(OKyvtxpOMt*LpepzmQX;GrSbAC#yenC-wR%&ud zvA$1cQc(dVnL>UZf1H>Vo7FxUa`J`fuYIdjf}FJ+nKc)0bC;? AS^xk5 diff --git a/backend/api/migrations/__pycache__/0015_alter_sign_id_alter_video_id.cpython-313.pyc b/backend/api/migrations/__pycache__/0015_alter_sign_id_alter_video_id.cpython-313.pyc index 6ce4e001e0d16c0e74a9068912aab2351325558a..9381e08ff8957c26b15ed243c19dfceba82ff483 100644 GIT binary patch delta 99 zcmZ37yPNTgX(OKyvtxpOMt*LpepzmQX;GrSbAC#yenC-wR%&ud zvA$1cQc(dVnL>UZf1H>Vo7FxUa`J`fuZT-jf}FJ+nKc)0bDI1 ATL1t6 diff --git a/backend/api/migrations/__pycache__/0016_alter_sign_id_alter_video_id.cpython-313.pyc b/backend/api/migrations/__pycache__/0016_alter_sign_id_alter_video_id.cpython-313.pyc index 5e31721f0ccf65b6b116a7f39811e172ce68efb0..917c98d0315a56932d1f0d84cd0fd863bba526c3 100644 GIT binary patch delta 99 zcmZ37yPNTgX(OKyvtxpOMt*LpepzmQX;GrSbAC#yenC-wR%&ud zvA$1cQc(dVnL>UZf1H>Vo7FxUa`J`fuY&tjf}FJ+nKc)0bDmB ATmS$7 diff --git a/backend/api/migrations/__pycache__/0017_alter_sign_id_alter_video_id.cpython-313.pyc b/backend/api/migrations/__pycache__/0017_alter_sign_id_alter_video_id.cpython-313.pyc index 81e1fc42aaccdf98968001ed49a333038dc44580..ccd30f9558cc415e953e31b115cff79485efe188 100644 GIT binary patch delta 99 zcmZ37yPNTgX(OKyvtxpOMt*LpepzmQX;GrSbAC#yenC-wR%&ud zvA$1cQc(dVnL>UZf1H>Vo7FxUa`J`fuZ^2jf}FJ+nKc)0bD^L AT>t<8 diff --git a/backend/api/migrations/__pycache__/0018_video_media_filename_alter_sign_id_alter_video_id.cpython-313.pyc b/backend/api/migrations/__pycache__/0018_video_media_filename_alter_sign_id_alter_video_id.cpython-313.pyc index 9bfd45d7e89d899e463502b1d1201828681b086f..d0ed657dc1aed3e8d6d6451dbbfbbc97e277db65 100644 GIT binary patch delta 98 zcmaFN^@fZ0GcPX}0}xDF$DDa+Bkv?;w>oF5n9$7yPL6eBkv?;+fx0E{M=OivfTXAqC|b?{FGGvf};Ga)Z~(4 reV@#vqD1G6#1j3a#N_PMycGS!f=vC~%=DtflFag diff --git a/backend/api/migrations/__pycache__/0019_alter_sign_id_alter_video_id_and_more.cpython-313.pyc b/backend/api/migrations/__pycache__/0019_alter_sign_id_alter_video_id_and_more.cpython-313.pyc index f03208220fc539f6418e5b55f42e37783fdd2446..64dfe6ef112a29fd714c76ec0a1275f555d28263 100644 GIT binary patch delta 98 zcmdnYy@#9kGcPX}0}xDF$DApOlWaxQE^O8X>xL6j7xrbUQT{uN^wj; zQGQlxNq%v>VN7sldY*GmVsUXyQetv;YFVo7FxUUAH39hP=R0DsjZ AV*mgE delta 89 zcmdnPy_uW$GcPX}0}%AE+|OXx$oq)dHd8+%KQ~psEH}TjC{f=zKP6SapeR2pHMyi% r-zPJvDA741u|z*9F*!RmFGWAGAX7g#GrcIWBr`v+SbwuAOFJU~DvBPq diff --git a/backend/api/migrations/__pycache__/0020_alter_sign_id_alter_video_id.cpython-313.pyc b/backend/api/migrations/__pycache__/0020_alter_sign_id_alter_video_id.cpython-313.pyc index ea5b907d2cee06bc0691db1da2c6685b59a58fc5..49104789ec7720c664d52a0ed71b65c16524c763 100644 GIT binary patch delta 106 zcmdnQxto*sGcPX}0}xDF$DAp>kynPS`FeW%NJ7q I?abPY09`O7vH$=8 delta 89 zcmdnZxrvkaGcPX}0}yn4`k%qPkynP?q@qOUjKmWCq{QUx)Vvh^#DYxy+|2Z%#FEVXykdO=10%!98yRIcw=-)q0sxWx BA^ZRU diff --git a/backend/api/migrations/__pycache__/0022_alter_sign_id_alter_video_id.cpython-313.pyc b/backend/api/migrations/__pycache__/0022_alter_sign_id_alter_video_id.cpython-313.pyc index 9033bfe2b226a69d8fa2ddfddf40508115994316..f84a59b53a162c35b0a40fc593c82c3254219b49 100644 GIT binary patch delta 99 zcmZ3?q@qOUjKmWCq{QUx)Vvh^#DYxy+|2Z%#FEVXykdO=10$o!8yRIcw=-)q0sxZ* BA^-pY diff --git a/backend/api/migrations/__pycache__/0023_alter_sign_id_alter_video_id.cpython-313.pyc b/backend/api/migrations/__pycache__/0023_alter_sign_id_alter_video_id.cpython-313.pyc index 28ad15ea1e5582515d8c562e9da6710f41f65306..8a94b7d4e8e7575fbc363c2b8634e45ceca92aa5 100644 GIT binary patch delta 99 zcmZ3b>K zSl=fzsVLDoBe6t3DKR-aH7`X!u^>}FH#5B`u_QA;uUOx}z{q&=Mn>7q?abPY00Z72 ANdN!< diff --git a/backend/api/migrations/__pycache__/0024_alter_sign_id_alter_video_id.cpython-313.pyc b/backend/api/migrations/__pycache__/0024_alter_sign_id_alter_video_id.cpython-313.pyc index 410f3432cb5898363b0d40058fb789bcccba218c..19a0e78ccd3a8ecb6593e66ddb6c5667e4e3caa4 100644 GIT binary patch delta 99 zcmZ3+Q=uw?3kdRk)NBYUzVF+T9l~ooS%}aUr>~vm6}{q ztnZVVRFvqPkyxUil$e~InwO%VSdgioo0(peSdy8aSFCSfU}Q3RBctr*c4lox0Lo?` Aod5s; diff --git a/backend/api/migrations/__pycache__/0025_alter_sign_id_alter_video_id.cpython-313.pyc b/backend/api/migrations/__pycache__/0025_alter_sign_id_alter_video_id.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2de05a35513c370f5c7ae64f44c68836d3a1effd GIT binary patch literal 1202 zcmbVLzi-n(6h7Or6T1nNKm|f7&?o~DN=e(ejS)gZtt!z1s%knQ45y2Ii4I&loNZ7$ zAS5Jamd>pF7!dzSDMPDU7?{eGDzJ0s)`}R)(39@H_r1G&@A-YtgHp)=e0~0^kg@{6 zPXV%}9vOp0ZfpS?*wQkfLd(n2l1$|#g(_FT1yBLDauL`$M_w&tkB8diamAv!u2fU^ zg?YawGh>}}DT+xLL`+)`J?uxWILlV)$QbFs;yhfv0020WEnXw%XOKK*hO0GmTIS% zelP3Hex4V_d!?WrVH1tUbQ2;!#uP@R8$jY6p%=u%A%`p{{7fd^X4Q3PTG*R4>j+Pq z^`_NAb;~n5^+vPpwx--hyFH5*AJkNq_izU#e#{EkBQa|Gn2q!(Sx0mOKEoSKk1!?3 zC!3gQNkE<_xTbLO1Ys~h>zL(IsdfnVJ*K9$Y*y#Yw%M7TZPl%YIa6<9%c{4g=1{$Z zO>5d~b*#CW&PP56C02lG7zmjGArG7QnA=4NpC`x{p*cDYVTaHt_DO()P#k->hXW4> zF2NBM1ICQoqBD!43YrrReQoW|LW)@~Nkn&qgBf8DXLC0OVHEQjbRmjkO4><`BM9jj ze?H(FFfxC`S>p|e96xbg#$Y~?@886G>bUDNE zb~th7e~FvyZBUKpONHP(de6mM(AR)&_7(Y@_WEw$0Q%Y8!uU>MeDD1D-kGtz@`c@U zWv5*E(EMV3vbN1f->*5_U4MJ?RUd$5c}3>xq5N1r0O0Hs`5>Rujemk%I%$y7NLhQc zL?^O}YbqV*Hq*VQDCmZhUOS~ErQz_qL`M(rSH#7_%|oJZ(JF`H&xTGbT4Py(qCHGe565W@5E20M3jd^8f$< delta 85 zcmdnUxPp=AGcPX}0}%Y*cpzgUkCCmrenx(7s(x8+erZvnzH@#`s(wLHepYI7NwL09 nW>Qh2b4Fr`eo|s`c4}UVequqUer{%ZQDRAEeqOQu#1>ru-8vp* diff --git a/backend/api/tests/__pycache__/__init__.cpython-313.pyc b/backend/api/tests/__pycache__/__init__.cpython-313.pyc index 3e42e68acb02b9af2dcedc1035fc8bec44df6d6c..e9667d61b50cce55bb4f79d44505022f6e3c8ff7 100644 GIT binary patch delta 89 zcmZ3?xQ3DEGcPX}0}xDF$DBEl$H>v!*(xTqIJKxaCZ{wxIWfj1zdSD|KQW~^CZH%k rE43uQINmTOI5R!ZIVZ8WI3_7EIXg8kB_^>TGo~c9xTH8{Vwo-gBM~3a delta 80 zcmZ3(xR{aWGcPX}0}!MH9L|`?V`Sl^pOK%Ns$Z6yUs{x?@0_2Ks$Wo)pOuTGo~c9xTH9yG%vFxW@5E20MC3P1poj5 delta 85 zcmdnUxPp=AGcPX}0}%X-QKO;XkRlh7ZzqBY(-#I@eRllGpKPxr4q*&i4 mGpQ)iIU}(|KPfReJ2fvwKd~TFza+I7C|8=7S)xC&MHc|Xv>o#R diff --git a/backend/api/tests/unit/__pycache__/test_utils.cpython-313.pyc b/backend/api/tests/unit/__pycache__/test_utils.cpython-313.pyc index 5c949edc1764db6efa2a6a51cb29e07ac13d73c9..e98448e5fbb8336e9e0375b2a2fe6d8d5cfbf6c1 100644 GIT binary patch literal 2527 zcmc&$&2Jk;6rc6liR~nEDNY(ffoW4zuc(ZW8W0t2p@C2(B5J#Fg;YzU>Fzk)WWDRm z?3y+gIH7Rj6e&j#2h;-+#|m*k%0CcfRiKq3A;G0LRJV8D+g;~NCZw0LlAq_}&CGl6 z_ug-&J2Fxv@GbwWJHHPQ@+WqBUoLHQFF|9Sn8eiP$gCzcitWr?W>%Ma+}7u^vpJcg zWSpEPW_E&@xw@Q1@vx72$2>yUt=`UfKo)-JPj>;tI=QtoXKH3ll~G|qu5(@(^>SUUD&*Sn_J7m zv+KO&)X^$c4?QP{n=C}Es;zs`8#u$j>ohmG&)OWlWVUDvmij1J0Cq;x7|cE}SD#^% zL2yQ$1@Q%WQY2%Qt;)L(E_X)f){1|Xr+!@Ols{N2{E;92y7X0Pqwp|)x(lk$J%v_3 z{kQyCkPhH`NCH911&};GWJz#0*v*m|?kY@^5!<)ICZvOp^AcHOe_{+Ji4p4?x*P$8 zsDN9>B`izO?`4EMhLe4w?|6MdY@iL%%+XOiY@g$3NCiX;FKvDhLrxo^xA{GmJd}_xIR!QVex;Qr zcQ$`gRtQz~Ca_4aZBXEX9iG@_fUwmPviixj^9i_e2rTFUd2F}BS*&+7Ji&r6HlSZs zJ_DYI?ehwlsSFS?o+qnY)yu!U)_M8*R(>21-FkbbQ~r2=Y5qTeUON(?F_X7^8SuE) zQeNMoc_o^Ap^M5X|1+4_VZs!@(LMML#f0wpsM80!*JC2wyT<{*k_xe6L0Y zxaq3#%@$v=$>IAAit_IzPG6Gv%)yt1ngH>)u4&pfq1)u*HhJes_MCQR{iMX??9{vz{ltPy{gTvTpj>HQW(k-X pUs{rxQ><4|d5gm)H$SB`C)KWq6=*WZ=3)@zBQql-V-Yiu1pti~E9w9M diff --git a/backend/api/tests/unit/test_utils.py b/backend/api/tests/unit/test_utils.py index e69de29..310766e 100644 --- a/backend/api/tests/unit/test_utils.py +++ b/backend/api/tests/unit/test_utils.py @@ -0,0 +1,49 @@ +from django.test import TestCase +from django.core.files.uploadedfile import SimpleUploadedFile +from api.utils import verify_video_file_extension_is_ok + +class TestUtilsVideoExtension(TestCase): + + def test_com_extensao_valida_deve_retornar_true(self): + """ + Caso de Teste (Caminho Feliz): + Verifica se um arquivo com uma extensão de vídeo válida (.mp4) retorna True. + """ + video_file = SimpleUploadedFile("video_teste.mp4", b"file_content") + + resultado = verify_video_file_extension_is_ok(video_file) + + self.assertTrue(resultado) + + def test_com_extensao_invalida_deve_retornar_false(self): + """ + Caso de Teste (Caminho Triste): + Verifica se um arquivo de texto (.txt) retorna False. + """ + text_file = SimpleUploadedFile("documento.txt", b"file_content") + + resultado = verify_video_file_extension_is_ok(text_file) + + self.assertFalse(resultado) + + def test_com_extensao_maiuscula_deve_retornar_true(self): + """ + Caso de Teste (Borda): + Verifica se a função ignora o case (maiúsculas/minúsculas) da extensão. + """ + video_file_upper = SimpleUploadedFile("video_upper.MP4", b"file_content") + + resultado = verify_video_file_extension_is_ok(video_file_upper) + + self.assertTrue(resultado) + + def test_sem_extensao_deve_retornar_false(self): + """ + Caso de Teste (Borda): + Verifica o comportamento com um arquivo sem extensão. + """ + file_no_ext = SimpleUploadedFile("arquivo_sem_extensao", b"file_content") + + resultado = verify_video_file_extension_is_ok(file_no_ext) + + self.assertFalse(resultado) \ No newline at end of file diff --git a/backend/api/views/__pycache__/__init__.cpython-313.pyc b/backend/api/views/__pycache__/__init__.cpython-313.pyc index 504193f936565a65ced092cc12d22db6cfdfd451..a86458a61869eccb021d8fef15f648d2eee687f2 100644 GIT binary patch delta 89 zcmZ3?xQ3DEGcPX}0}xDF$DBEl$H>v!*(xTqIJKxaCZ{wxIWfj1zdSD|KQW~^CZH%k rE43uQINmTOI5R!ZIVZ8WI3_7EIXg8kB_^>TGo~yvwY)fHVwo-gBJ&^1 delta 80 zcmZ3(xR{aWGcPX}0}yn4`kyh8$H>A-KO;XkRlh7ZzqBY(-#I@eRllGpKPxr4q*&i4 iGpQ)iIU}(|KPfReJ2fvwKd~TFzbrGgyjXu?y)FPn2pmNK diff --git a/backend/api/views/__pycache__/auth_views.cpython-313.pyc b/backend/api/views/__pycache__/auth_views.cpython-313.pyc index 26dfe29547062a4d12f54c047fbdba6706846061..b488b0058a278c5b9aaf1f714e9528e218b482a6 100644 GIT binary patch delta 93 zcmeyu{g<2fGcPX}0}xDF$DH|ZBX2shqp!17OlWaxQE^O8X>xL6j7xrbUQT{uN^wj; vQGQlxNq%v>VN7sldY*GmVsUXyQetv;YFq{{^qUB9!vlM$R1$; diff --git a/backend/api/views/__pycache__/sign_views.cpython-313.pyc b/backend/api/views/__pycache__/sign_views.cpython-313.pyc index 5a5a5db4f2878c0bad3bace24fa885f94b21a66e..81d87d34afaa308e6f6ac8931dd26c12b63fccab 100644 GIT binary patch delta 93 zcmew-*)GNVnU|M~0SG3oW6rGD$g9rm=<9416Iz^FR2-92nw*>%;Fl$e~InwJujSdbZ0mYG^!9J4uxc@if8z5yXm delta 84 zcmZpd`X|ZznU|M~0SFedF=U!=O4N7GPf67;D9X=DO)e?c m_sL8uN_5UhEYVL&OwLZtOVLj($kZ>(Of4_g-(1Q(i4y=qkQ=uE diff --git a/backend/api/views/__pycache__/user_views.cpython-313.pyc b/backend/api/views/__pycache__/user_views.cpython-313.pyc index 80596f4969763f1be35f126c18230bde5624e462..e52ef4a801895a82e9953824fbfd8dcd34db4704 100644 GIT binary patch delta 94 zcmZ3gvrdQaGcPX}0}xDF$DG+Lw2^NSyQ8nORZM7cYEf}aPHA#-VvI|Ed0tL_VoGsL wKv8~HYDs=^ykSgmW_q4;PGWI!Oj2TUc4}TqOkzQ1Oj%}Xd2!6<7woot0PK1q5C8xG delta 85 zcmZ3dvs8!gGcPX}0}$waXUP01xRGxWyM>E>Mt*LpepzmQX;GrSbAC#yenC-wR%&ud nvA$1cQc(dVnL>US!QZ^vHs?d?6!OWzUdvT diff --git a/backend/api/views/__pycache__/video_views.cpython-313.pyc b/backend/api/views/__pycache__/video_views.cpython-313.pyc index 67c0491cfb7fd779b3c3f1412c2fcf60a9e83154..75e69119594e7b0d6542297758254717d7363cc3 100644 GIT binary patch delta 93 zcmX@0dQz45GcPX}0}xDF$DFx(BkxXTM?Yt)n9$Qh2b4Fr`eo|s`c4}Sjc~z44GcPX}0}xDF$DH|hAuqSRr?XW|XmM&$aZFBWa&lsfOMZD?PJUuaaZEr_ lepYHpesR2EOmJp;o^wuOadAviVsdtBUJ9Jv?9AQC2mq6FAdCP2 delta 81 zcmcaAc}9}=GcPX}0}%AE+|Ni_$jfc!pr4VSo2p-yn_pU#sPCMglB!=&l%JKFTvDv> clbKYM=$w&QqMwwQoSmAN0;f0oaCb5S06%9NjsO4v diff --git a/backend/backend/__pycache__/urls.cpython-313.pyc b/backend/backend/__pycache__/urls.cpython-313.pyc index c50b3c91b5af474d20758b973f5b3cb753d6350c..1b97fa676dcf6f77906174fef00dfe91f120dff4 100644 GIT binary patch delta 90 zcmcc5@q&Z*GcPX}0}xDF$DHZCk#{$xL6j7xrbUQT{uN^wj; lQGQlxNq%v>VN7sldY*GmVsUXyQetv;YF-MQp8StF5deMRAqM~e delta 81 zcmaFCai4?tGcPX}0}uo=-p(-D$h(`_%tk*WKQ~psEH}TjC{f=zKP6SapeR2pHMyi% c-zPJvDA741u|z*9F*!RmF9l9dW@kwR06NzjP5=M^ diff --git a/backend/backend/__pycache__/wsgi.cpython-313.pyc b/backend/backend/__pycache__/wsgi.cpython-313.pyc index 785ef2d31ce5140d054e68efaa18fe49742a4870..a1291f960daad610ef44467c76efcd19b0a52dee 100644 GIT binary patch delta 90 zcmeBVoy5xfnU|M~0SG3oW6qquk@pj$y{ofTOlWaxQE^O8X>xL6j7xrbUQT{uN^wj; lQGQlxNq%v>VN7sldY*GmVsUXyQetv;YF-MQo@~k#0svvhAO8RV delta 81 zcmbQl+R4iMnU|M~0SLZtJdn}8k@pj$nT>u%er~FMS#Ex5QKG(ceoCr-K~a8IYH~@j czE5USQKEB3Vu^lIVsdtBUJ9I^Y{wJ=0C(OTg#Z8m diff --git a/backend/db.sqlite3 b/backend/db.sqlite3 index 3989631efad5e130d5163e7bdc6670472714a543..1ed686f6ca801b69bf040f7e5ee470c5fabf573a 100644 GIT binary patch delta 378 zcmZozz}2vTYl5_(8v_G_CJ+k)F*6YVny6#U>c*hgrnxa?0Y9@gOU`6=flwxvoXv>> zd@Ov<+N=!1{*H+SnFa<%rjrkdsR|hzC>UB;nHXCc8tR!?8d{i`ZQdxNAkC<~`I5fn z2Uazpp(@)26d3g!jG9#&o!OfefP}cFCSz-LNn%n?YF=u2d_2&=__EBD)O=K)#&-5} z#&Skx>qeL9iph*J+Njd;hNyf^wmODiK>HXNN*dj!8zwQ9F}iMFk;Hg|nbBo>V;Z9Y zho*j`6PviR>|}p#naL}-`B)X3#TuQbzer=0V+31P#mMM5nTJJ&QDOW1493LvNe@`I zvlKA>k)PJU#I~JHfa#w+8-oA?1Ha2=MFlJV?Jo9A2LvD@cQy+qT;kt;C!R@DU^}Y; a(=NX0`|FrmrvsJjnU=r=G$(-R4?h5&HEXH> delta 213 zcmZozz}2vTYl5_(D+2?ACJ+k)F*6WdK&37qu~E0Y9@A%f`v<0->7~6+&4y zZxm6GX4KkzN#F7Vt0GXX!gc`#Mm>kk1p*%!nM)cSrW+Do`3JnkV!NlYO0f$KwSeCO0Fez+jDPY>o2NY@D?qbh$Kwvvd1JfV=Z3#@Q0^3 Date: Thu, 6 Nov 2025 19:51:52 -0300 Subject: [PATCH 2/5] =?UTF-8?q?feat:=20Adiciona=20testes=20de=20integra?= =?UTF-8?q?=C3=A7=C3=A3o=20para=20cadastro=20de=20usu=C3=A1rio=20(signup)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../__pycache__/test_urls.cpython-313.pyc | Bin 4385 -> 6361 bytes backend/api/tests/unit/test_urls.py | 50 +++++++++++++++--- 2 files changed, 43 insertions(+), 7 deletions(-) diff --git a/backend/api/tests/unit/__pycache__/test_urls.cpython-313.pyc b/backend/api/tests/unit/__pycache__/test_urls.cpython-313.pyc index ff2387658384c75ce3adaed08a987673dad3fd9a..4c68e476f93e031d445d588c7c9fd5861e4da444 100644 GIT binary patch literal 6361 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 None: @@ -9,16 +10,16 @@ def test_if_is_running(self) -> None: self.assertTrue(True) def test_if_auth_token_route_exists(self) -> None: - response = self.client.post("/api/auth/login") - self.assertEqual(response.status_code, 400) + response = self.client.post("/api/auth/login", data={}) + self.assertEqual(response.status_code, 400) - def test_if_auth_token_route_returns_not_found(self) -> None: - response = self.client.get("/api/auth/login/") - self.assertEqual(response.status_code, 404) + def test_if_auth_token_route_blocks_get_method(self) -> None: + response = self.client.get("/api/auth/login") + self.assertEqual(response.status_code, 405) def test_if_auth_token_return_200_sucess_in_message(self) -> None: - #response = self.client.get|() pass + class TestUserUrls(TestCase): def setUp(self) -> None: self.client = Client() @@ -51,4 +52,39 @@ def test_if_single_user_route_exists(self) -> None: if path.name == "singular_user": exists = True break - self.assertTrue(exists) \ No newline at end of file + self.assertTrue(exists) + + def test_se_o_cadastro_de_usuario_funciona(self) -> None: + user_data = { + "email": "usuario@teste.com", + "password": "SenhaForte@123", + "first_name": "Tester", + "last_name": "QA" + } + user_count_before = get_user_model().objects.count() + response = self.client.post("/api/users", data=user_data) + + self.assertEqual(response.status_code, 201) + user_count_after = get_user_model().objects.count() + self.assertEqual(user_count_after, user_count_before + 1) + + response_data = response.json() + self.assertEqual(response_data['user']['email'], user_data['email']) + + def test_se_cadastro_falha_com_email_duplicado(self) -> None: + get_user_model().objects.create_user( + email="email.duplicado@teste.com", + password="123", + first_name="Usuario Original" + ) + + user_data_duplicada = { + "email": "email.duplicado@teste.com", + "password": "OutraSenha@123", + "first_name": "Tentativa de Clone" + } + user_count_before = get_user_model().objects.count() + response = self.client.post("/api/users", data=user_data_duplicada) + self.assertEqual(response.status_code, 400) + user_count_after = get_user_model().objects.count() + self.assertEqual(user_count_after, user_count_before) \ No newline at end of file From 4e50f87c8f172b69b54b2b00ff17b5fd1c90b3b6 Mon Sep 17 00:00:00 2001 From: Lucas Santos Nascimento Date: Thu, 6 Nov 2025 19:59:36 -0300 Subject: [PATCH 3/5] =?UTF-8?q?feat:=20Adiciona=20testes=20completos=20de?= =?UTF-8?q?=20autentica=C3=A7=C3=A3o=20(signup=20e=20login)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../__pycache__/test_urls.cpython-313.pyc | Bin 6361 -> 7580 bytes backend/api/tests/unit/test_urls.py | 80 ++++++++++++------ 2 files changed, 56 insertions(+), 24 deletions(-) diff --git a/backend/api/tests/unit/__pycache__/test_urls.cpython-313.pyc b/backend/api/tests/unit/__pycache__/test_urls.cpython-313.pyc index 4c68e476f93e031d445d588c7c9fd5861e4da444..a7158ef99e1c5966a8b1b146c1e460ed0d7bcd88 100644 GIT binary patch literal 7580 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 None: self.client = Client() + # Cria um usuário padrão para usar nos testes de login + self.email_teste = "login@teste.com" + self.senha_teste = "SenhaForte@123" + self.user = get_user_model().objects.create_user( + email=self.email_teste, + password=self.senha_teste, + first_name="Usuario", + last_name="Login" + ) def test_if_is_running(self) -> None: self.assertTrue(True) - def test_if_auth_token_route_exists(self) -> None: - response = self.client.post("/api/auth/login", data={}) - self.assertEqual(response.status_code, 400) - def test_if_auth_token_route_blocks_get_method(self) -> None: + """Verifica se a rota de login bloqueia requisições GET (deve aceitar apenas POST).""" response = self.client.get("/api/auth/login") - self.assertEqual(response.status_code, 405) + self.assertEqual(response.status_code, 405) # 405 Method Not Allowed + + def test_login_sucesso_retorna_tokens(self) -> None: + """ + Caminho Feliz: Verifica se um login com credenciais corretas retorna 200 OK e os tokens. + """ + login_data = { + "email": self.email_teste, + "password": self.senha_teste + } + response = self.client.post("/api/auth/login", data=login_data) + + # 1. Esperamos status 200 OK (Sucesso) + self.assertEqual(response.status_code, 200) - def test_if_auth_token_return_200_sucess_in_message(self) -> None: - pass + # 2. Verificamos se a resposta contém os tokens e os dados extras que seu serializer customizado retorna + response_data = response.json() + self.assertIn("access", response_data) # Token de acesso + self.assertIn("refresh", response_data) # Token de atualização + self.assertEqual(response_data["email"], self.email_teste) # Email retornado + self.assertTrue("user_id" in response_data) # ID do usuário retornado + + def test_login_falha_com_senha_errada(self) -> None: + """ + Caminho Triste: Verifica se o login falha com a senha incorreta. + """ + login_data_errado = { + "email": self.email_teste, + "password": "SENHA_ERRADA" + } + response = self.client.post("/api/auth/login", data=login_data_errado) + + self.assertIn(response.status_code, [400, 401]) + + def test_login_falha_com_usuario_inexistente(self) -> None: + """ + Caminho Triste: Verifica se o login falha para um email que não existe no banco. + """ + login_data_inexistente = { + "email": "naoexiste@teste.com", + "password": "qualquersenha" + } + response = self.client.post("/api/auth/login", data=login_data_inexistente) + + # Esperamos erro (400 ou 401) + self.assertIn(response.status_code, [400, 401]) class TestUserUrls(TestCase): def setUp(self) -> None: self.client = Client() - def test_if_is_running(self) -> None: - self.assertTrue(True) - def test_if_users_route_exists(self) -> None: response = self.client.get("/api/users") self.assertEqual(response.status_code, 200) @@ -43,20 +87,10 @@ def test_if_user_route_returns_json(self) -> None: self.assertEqual(response.headers['Content-Type'], 'application/json') data = response.json() self.assertIsInstance(data, list) - - def test_if_single_user_route_exists(self) -> None: - module = importlib.import_module("api.urls") - url_patterns = module.urlpatterns - exists = False - for path in url_patterns: - if path.name == "singular_user": - exists = True - break - self.assertTrue(exists) def test_se_o_cadastro_de_usuario_funciona(self) -> None: user_data = { - "email": "usuario@teste.com", + "email": "usuario_novo@teste.com", "password": "SenhaForte@123", "first_name": "Tester", "last_name": "QA" @@ -67,7 +101,6 @@ def test_se_o_cadastro_de_usuario_funciona(self) -> None: self.assertEqual(response.status_code, 201) user_count_after = get_user_model().objects.count() self.assertEqual(user_count_after, user_count_before + 1) - response_data = response.json() self.assertEqual(response_data['user']['email'], user_data['email']) @@ -77,7 +110,6 @@ def test_se_cadastro_falha_com_email_duplicado(self) -> None: password="123", first_name="Usuario Original" ) - user_data_duplicada = { "email": "email.duplicado@teste.com", "password": "OutraSenha@123", From 451e5d3f569e4082a5af87a7167886b14b8ad60d Mon Sep 17 00:00:00 2001 From: Lucas Santos Nascimento Date: Thu, 6 Nov 2025 20:02:46 -0300 Subject: [PATCH 4/5] =?UTF-8?q?feat:=20Adiciona=20testes=20completos=20de?= =?UTF-8?q?=20autentica=C3=A7=C3=A3o=20(signup=20e=20login)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../__pycache__/test_urls.cpython-313.pyc | Bin 7580 -> 7938 bytes backend/api/tests/unit/test_urls.py | 42 +++++++++--------- 2 files changed, 20 insertions(+), 22 deletions(-) diff --git a/backend/api/tests/unit/__pycache__/test_urls.cpython-313.pyc b/backend/api/tests/unit/__pycache__/test_urls.cpython-313.pyc index a7158ef99e1c5966a8b1b146c1e460ed0d7bcd88..0990628f56a0161cba1fe66424a4b53a8e352420 100644 GIT binary patch delta 1850 zcmZ{lU2GIp6oBuYzn$&=_Gi1>u4Si`pANM@mR44(P0CMGTDxecH5y4aD?7AHw%dAV zHi8(JkXTDXLgA(fMobi5Kwpe&c<=?|gFdSvEQ7?xx4uDGL&AgcoY_Lr=qCHknRCxQ zd+t3ydwJ;0aPVOuP)FeNM`s{+qv1j@R+@&lRbmi>PLOfR=(xZH4c~og}x{#W_&Toou(1*NPy3$H? zG4(jqn_0~DW{UP)Z+>AmS6E-Agm7Ih(@OcCe1kR+-J7~DupoG3A;gZ0YA^3oW4m|Z zTNl8Qj#~=_N6lE4$?QV~)(%QtVlB8<=ekX2Gj@h`^HZu7jDgzv9B`VfMOye@YCm1$ ziAY3Ti)mLUy|hGhPs;Hd2UBAs>4Q^KBL_y<3t-N6Ao>C8D-h)R1%NKIM$|SSl8C(s zj7k@40n~2>kTx01WEWUBEL(W@nx?T5G@U`M5=;UuB$dvc}rChhl|7D>*JP2_&dIkYtc#S5iQNx&xgDB#$epAgQk81dhgbr%OhdS7hm?`pl`}l9lX%uekDG+t zv2@N#vtpr;E6fhz&TRnxAROm+LQB2@)N~@A=f}g-bhvyoJV>{_jT%fER0LkXBQ6$g zN6DIb(>7VHRC%o7Q@XGGZNn+5xb_2lu&Jv>$E};i?3pt&S(91pC4RE0L%~{MyZM!- zG#%qY1_=7+((l>)#3 zt8cws-}y^@=l*N0zt#^dE0t*5?Wq29RA2U2>YJC9yG`2ifl8?H{K>N?FCD%W>Z-J~ zttfZGkp~_UX}_-$Z{U3BZ0M45OHJ_4yz%l<C615=pucqoQ!=V47%mg4?($ouB!|$fkCziYesy4*lhcadP~GL--o#37Ey_h$KRtl z{zLrx5>6I9z$S4K&&u%B>@`Fj;m(31C>=%Q5Jkjk#7BtN5mSgZ1dcI=e?u;?87-WG zI5DW4s4ANiLz0KutA1JDRSl}LR&5H(lk|}ml80-K(1)(_P+L@B^Sq<2Lvg)M@mJeo vLuX+Ti`>Gdxi3;me7%Q6vt=mU4N`&JLC%|&BwH9s5b#8t(rD%rO-f=Hc9K0*bRtQjkfkA*~Z>= zX4Vj;5~)BSkP3}8%7qUhs3^(_2@4KAA#y3)aRSXxm3k>}9H&i>`0(4eZ|1%E zzj<%{{_vM)LjMGV8iJoc8Z=Kd6+)5A7vXIkB~SuSq6y6Kgp0X|e0NQ{Clsa-6hVhj z!rg`v$~8RbmeB|?wdz&D>)Ge^%zF#(9VmSMDOQS6{1`W@u$LzQx6vOh?PB3$-?W$W>^3$+!hB9-`Oc{hzVi0CK21!$rvFA;T+{oBVd1`{2 zF6B*bZhpV{6XoRmXp%(J^c@IDQPVLPF>=&0IJrEPNb0f2;eI1$_8WO;p}(4^yp9oy zZz!w*&MUd+sZ$Dwvhp3?F5Xpt#;bl^TX|c1-N>5Of=$L~##}i~_Up=LYl2dCmZTU> zQ!8Z}CMPMIG3vm{K$}?xIW{mrrX~p`HYbj~NG%@IHe4(O2eYt5H(&#ol(gX(<%d#_ zN0{D@i*eo08s&y2iK5{r_33*SQj{Tg|*5xty<`;%*uMj zmY3H{H@^?KjdnED(k7;T$J8AU@(0CIQ=_z658nIAhgZG2Z{@Y8)hC(B9r}FvcCGq3 zBeP&Y%~@y^rxw_zRl9+hR;o*k#xIP_j!sXHoEu>=IJsIZ>j$g61|29DWE*sKw@z6i z8$`&5*hy(d#kRi__lhU}RQ)U9;Fkb<+H+bAZ;P+B;#HsS&&&DxAA)lRGYGVhW(_k# zV4#S#dCw+vSyoCco7^y@mBCq;n!>073lvJmf__wQ3)>N^CBDS5hQ#!a8#!3kyNHLRfZfMHZ0DzH#aXz^H~daRf(JJB#@OWRWX)WZ+{mr zieSets~5nl2iSyMoRpCNd`wOiJ0S6<#C3_Zge~Dn#3iOAIwaa8-q^z!82lhW_6n None: self.client = Client() - # Cria um usuário padrão para usar nos testes de login self.email_teste = "login@teste.com" self.senha_teste = "SenhaForte@123" self.user = get_user_model().objects.create_user( @@ -18,59 +18,47 @@ def test_if_is_running(self) -> None: self.assertTrue(True) def test_if_auth_token_route_blocks_get_method(self) -> None: - """Verifica se a rota de login bloqueia requisições GET (deve aceitar apenas POST).""" response = self.client.get("/api/auth/login") - self.assertEqual(response.status_code, 405) # 405 Method Not Allowed + self.assertEqual(response.status_code, 405) def test_login_sucesso_retorna_tokens(self) -> None: - """ - Caminho Feliz: Verifica se um login com credenciais corretas retorna 200 OK e os tokens. - """ login_data = { "email": self.email_teste, "password": self.senha_teste } response = self.client.post("/api/auth/login", data=login_data) - # 1. Esperamos status 200 OK (Sucesso) self.assertEqual(response.status_code, 200) - # 2. Verificamos se a resposta contém os tokens e os dados extras que seu serializer customizado retorna response_data = response.json() - self.assertIn("access", response_data) # Token de acesso - self.assertIn("refresh", response_data) # Token de atualização - self.assertEqual(response_data["email"], self.email_teste) # Email retornado - self.assertTrue("user_id" in response_data) # ID do usuário retornado + self.assertIn("access", response_data) + self.assertIn("refresh", response_data) + self.assertEqual(response_data["email"], self.email_teste) + self.assertTrue("user_id" in response_data) def test_login_falha_com_senha_errada(self) -> None: - """ - Caminho Triste: Verifica se o login falha com a senha incorreta. - """ login_data_errado = { "email": self.email_teste, "password": "SENHA_ERRADA" } response = self.client.post("/api/auth/login", data=login_data_errado) - - self.assertIn(response.status_code, [400, 401]) + self.assertIn(response.status_code, [400, 401]) def test_login_falha_com_usuario_inexistente(self) -> None: - """ - Caminho Triste: Verifica se o login falha para um email que não existe no banco. - """ login_data_inexistente = { "email": "naoexiste@teste.com", "password": "qualquersenha" } response = self.client.post("/api/auth/login", data=login_data_inexistente) - - # Esperamos erro (400 ou 401) self.assertIn(response.status_code, [400, 401]) class TestUserUrls(TestCase): def setUp(self) -> None: self.client = Client() + def test_if_is_running(self) -> None: + self.assertTrue(True) + def test_if_users_route_exists(self) -> None: response = self.client.get("/api/users") self.assertEqual(response.status_code, 200) @@ -87,6 +75,16 @@ def test_if_user_route_returns_json(self) -> None: self.assertEqual(response.headers['Content-Type'], 'application/json') data = response.json() self.assertIsInstance(data, list) + + def test_if_single_user_route_exists(self) -> None: + module = importlib.import_module("api.urls") + url_patterns = module.urlpatterns + exists = False + for path in url_patterns: + if path.name == "singular_user": + exists = True + break + self.assertTrue(exists) def test_se_o_cadastro_de_usuario_funciona(self) -> None: user_data = { From b36aa92923b560748bd68fb27db8d383792c6b1a Mon Sep 17 00:00:00 2001 From: Lucas Santos Nascimento Date: Thu, 6 Nov 2025 20:15:52 -0300 Subject: [PATCH 5/5] =?UTF-8?q?Adiciona=20testes=20unit=C3=A1rios=20(utils?= =?UTF-8?q?)=20e=20de=20integra=C3=A7=C3=A3o=20(auth=20login/signup)=20e?= =?UTF-8?q?=20corrige=20bugs=20de=20URL?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/__pycache__/backend.cpython-313.pyc | Bin 1609 -> 1618 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 177 -> 186 bytes .../__pycache__/test_backend.cpython-313.pyc | Bin 4793 -> 4802 bytes .../__pycache__/test_models.cpython-313.pyc | Bin 22075 -> 22084 bytes .../test_serializers.cpython-313.pyc | Bin 11896 -> 11905 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 174 -> 183 bytes .../test_auth_view.cpython-313.pyc | Bin 1893 -> 1902 bytes .../test_sign_views.cpython-313.pyc | Bin 4432 -> 4441 bytes .../test_user_views.cpython-313.pyc | Bin 5472 -> 5481 bytes .../test_video_views.cpython-313.pyc | Bin 4673 -> 4682 bytes 10 files changed, 0 insertions(+), 0 deletions(-) diff --git a/backend/api/__pycache__/backend.cpython-313.pyc b/backend/api/__pycache__/backend.cpython-313.pyc index dff8c7dc30eed09231ee7b75c0a180f90eaf1bf0..f4ac65116a63b23cee663a2072901dc0b74e0c7c 100644 GIT binary patch delta 87 zcmX@fbBTxdGcPX}0}xDF$DBETBkwsTYZqs$n9$V|t delta 78 zcmcb_bCQSmGcPX}0}%AE+|Ov)$a{{-$XY)mKQ~psEH}TjC{f=zKP6SapeR2pHMyi% g-zPJvDA741u|z*9F*!RmFGWAGAX9&{7_$vC00P(=MF0Q* diff --git a/backend/api/management/commands/__pycache__/__init__.cpython-313.pyc b/backend/api/management/commands/__pycache__/__init__.cpython-313.pyc index 3ab37064a30230fb940e0f91149ac95b39795d1b..7e3e2fe9d1856e062ab5785ec13365e6fd07f812 100644 GIT binary patch delta 102 zcmdnUxQmhdGcPX}0}xDF$2^hS*gw+QDkiizwWv5Ir!+Y^F~%joJTE6dF{L;rpeR2p zwIshd-Y_OOGd<5aC$YFVCMhvFJ2fvQCb1whCO0uJF+DXmHLoNlIX@T318SPsq6+}^ CfF(o# delta 93 zcmdnRxRH_jGcPX}0}$wNGfd<*b_>wY$j?pHFU!p@ElSjP&QD3zFDS~-N=+^)*7wOw uDoS+DNG#D$N=(j9%}dcwEXdT)P0UM7Pt8ruE74ER&js>QiuEV<>H+{Y4J?!GcPX}0}%AE+|M}1wUJMf$<|vxBR@A)zbrSuv?x*EIX@*;zn~~TD>b>K rSl=fzsVLDoBe6t3DKR-aH7`X!u^>~wB()eQSDKeuqQ5zpDO3OeLUtb5 diff --git a/backend/api/tests/unit/__pycache__/test_models.cpython-313.pyc b/backend/api/tests/unit/__pycache__/test_models.cpython-313.pyc index c7a6a63642c42c449841ac3e8f9b4a6692908bb3..893406064e0df21c7ca07350461615af2f58916a 100644 GIT binary patch delta 101 zcmdnJhVjT6M!wIyyj%=GFlilg=3cFheAAiSf}O2mLW@(2ieqw0lamu;T=L8Fa`F>X ziemzb^0QJ)@{8jQV}di&^PF=Mi;H8D5|gu2^HO3G3o>I$Qj1H9V@mTfOJX)ZVu}m~ E04`J}0ssI2 delta 92 zcmX@IhH>{AM!wIyyj%=G5WVhh#skfbeAAh1z4SBkb5r%pa`Q`z67`+)Q&RN{it@8k ulS_*AeKM1Z5}h*=OZ1Zxle1IvQuGrGGWAPRi-B^bd6^~pn_n|U1_J>6;vwDu diff --git a/backend/api/tests/unit/__pycache__/test_serializers.cpython-313.pyc b/backend/api/tests/unit/__pycache__/test_serializers.cpython-313.pyc index f5bf97e93ccbe83bddb1f3f8dece05c3af9c82f4..371e03f415d3390e3568ed951042137e74c27217 100644 GIT binary patch delta 99 zcmewn(-_P5nU|M~0SG3oW6ms<*vNO1(JjK+DkiizwWv5Ir!+Y^F~%joJTE6dF{L;r zpeR2pwIshd-Y_OOGd<5aC$YFVCMhvFJ2fvQCb1whrX;nvq&TKDFS8_Ovj|g)4glMc BBuxMS delta 90 zcmZpS{Sm|WnU|M~0SJ0n?q}Q--^h28(biu-BR@A)zbrSuv?x*EIX@*;zn~~TD>b>K rSl=fzsVLDoBe6t3DKR-aH7`X!u^>~wB()eQSDKeuqQ6;|DMbeWpROPC diff --git a/backend/api/tests/unit/views/__pycache__/__init__.cpython-313.pyc b/backend/api/tests/unit/views/__pycache__/__init__.cpython-313.pyc index acd4e345d1d7837f3f3074781e3d42027bb2bc56..d69b6cf2e99c8c98a7026bdaa57f5459a4a434ef 100644 GIT binary patch delta 100 zcmZ3-xSf&bGcPX}0}xDF$DBEl$H*tl*(xTqIJKxaCZ{wxIWfj1zdSD|KQW~^CZH%k zE43uQINmTOI5R!ZIVZ8WI3_7EIXg8kB_^>TGo~c9xTH9yG%vFxrYtkHyf|iJqb>lg CXC$ov delta 91 zcmdnaxQ>zMGcPX}0}yn4`kyh8$H>`NKO;XkRlh7ZzqBY(-#I@eRllGpKPxr4q*&i4 sGpQ)iIU}(|KPfReJ2fvwKd~TFza+I7C|8=7S)yN-nOa_~Ke0;}0HjqQ%>V!Z diff --git a/backend/api/tests/unit/views/__pycache__/test_auth_view.cpython-313.pyc b/backend/api/tests/unit/views/__pycache__/test_auth_view.cpython-313.pyc index 2f61e5345474c161a9504f44cbb664c3c46dbf62..ccc83fe67f8ca21ef2822a42624e8f3f4b6d55e3 100644 GIT binary patch delta 104 zcmaFL_l}SEGcPX}0}xDF$DC=tk++o5C&t+-CbT%Us5mC4G&wmj#wEWzFDE}Sr8p*_ zC_gK;B)>S`FeW%NJxL6j7xrbUQT{uN^wj; zQGQlxNq%v>VN7sldY*GmVsUXyQetv;YFqH%;vj{ G#ry!UmM3ih delta 95 zcmcbqbU}&tGcPX}0}u#vFl4UT$lJ^49HO6*pPQ;*mYZK%l&J5VpOUIyP?VpQnp{$> w?~|ESl<1t1SfZbln4F!Om!h9okf~piS`3sc&C4v&FUw3VFV^4ujIo#>0Kv#0`v3p{ diff --git a/backend/api/tests/unit/views/__pycache__/test_user_views.cpython-313.pyc b/backend/api/tests/unit/views/__pycache__/test_user_views.cpython-313.pyc index 2d1fc9fcd956de859be0d7809e0484ecba20c3a4..9dac6c828e643133cd1613656fc227ece13f81a9 100644 GIT binary patch delta 104 zcmaE$^-_!XGcPX}0}xDF$DDa?BX2*WPpq?5OlWaxQE^O8X>xL6j7xrbUQT{uN^wj; zQGQlxNq%v>VN7sldY*GmVsUXyQetv;YFqH%;x)y GjluxFF(;q^ delta 95 zcmaE<^+1dFGcPX}0}!0J$B@~yk++}GIYd7rKQ~psEH}TjC{f=zKP6SapeR2pHMyi% w-zPJvDA741u|z*9F*!RmFGWAGAXC32wHPQ@nwMFkUzV9#UaY_Q1!JQy07VHRq5uE@ diff --git a/backend/api/tests/unit/views/__pycache__/test_video_views.cpython-313.pyc b/backend/api/tests/unit/views/__pycache__/test_video_views.cpython-313.pyc index 891f43aacbe613e1b0a5831ee2038721393d510b..77e8e1a7bdc7f4a33a170481efa6e8b53e48118a 100644 GIT binary patch delta 104 zcmX@8a!Q5wGcPX}0}xDF$DFxmBkwFmpEzf$n9$