From 1fd115c2a252f6226ff994d7be767a949fc587cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrick=20M=C3=BCller?= Date: Tue, 15 Jun 2021 11:50:36 +0200 Subject: [PATCH 1/8] BETTERZON-146: Session handling rewrite HOTFIX --- Backend/src/models/crawling_status/crawling_status.router.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Backend/src/models/crawling_status/crawling_status.router.ts b/Backend/src/models/crawling_status/crawling_status.router.ts index 3d215bd..07ad5f0 100644 --- a/Backend/src/models/crawling_status/crawling_status.router.ts +++ b/Backend/src/models/crawling_status/crawling_status.router.ts @@ -25,8 +25,8 @@ crawlingstatusRouter.get('/', async (req: Request, res: Response) => { try { // Authenticate user const user_ip = req.connection.remoteAddress ?? ''; - const session_id = req.body.session_id; - const session_key = req.body.session_key; + const session_id = req.params.session_id; + const session_key = req.params.session_key; const user = await UserService.checkSession(session_id, session_key, user_ip); if (!user.is_admin) { From 0cd1213c40b94a8981420d166be7cdb0978049df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrick=20M=C3=BCller?= Date: Tue, 15 Jun 2021 12:09:04 +0200 Subject: [PATCH 2/8] BETTERZON-146: Session handling rewrite HOTFIX 2 --- .../src/models/crawling_status/crawling_status.router.ts | 4 ++-- Backend/src/models/favorite_shops/favoriteshops.router.ts | 8 ++++---- Backend/src/models/pricealarms/pricealarms.router.ts | 4 ++-- Backend/src/models/vendors/vendors.router.ts | 4 ++-- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/Backend/src/models/crawling_status/crawling_status.router.ts b/Backend/src/models/crawling_status/crawling_status.router.ts index 07ad5f0..f2d7dfd 100644 --- a/Backend/src/models/crawling_status/crawling_status.router.ts +++ b/Backend/src/models/crawling_status/crawling_status.router.ts @@ -25,8 +25,8 @@ crawlingstatusRouter.get('/', async (req: Request, res: Response) => { try { // Authenticate user const user_ip = req.connection.remoteAddress ?? ''; - const session_id = req.params.session_id; - const session_key = req.params.session_key; + const session_id = (req.query.session_id ?? '').toString(); + const session_key = (req.query.session_key ?? '').toString(); const user = await UserService.checkSession(session_id, session_key, user_ip); if (!user.is_admin) { diff --git a/Backend/src/models/favorite_shops/favoriteshops.router.ts b/Backend/src/models/favorite_shops/favoriteshops.router.ts index 4cb0266..eab15bd 100644 --- a/Backend/src/models/favorite_shops/favoriteshops.router.ts +++ b/Backend/src/models/favorite_shops/favoriteshops.router.ts @@ -24,8 +24,8 @@ favoriteshopsRouter.get('/', async (req: Request, res: Response) => { try { // Authenticate user const user_ip = req.connection.remoteAddress ?? ''; - const session_id = req.params.session_id; - const session_key = req.params.session_key; + const session_id = (req.query.session_id ?? '').toString(); + const session_key = (req.query.session_key ?? '').toString(); const user = await UserService.checkSession(session_id, session_key, user_ip); const priceAlarms = await FavoriteShopsService.getFavoriteShops(user.user_id); @@ -76,8 +76,8 @@ favoriteshopsRouter.delete('/:id', async (req: Request, res: Response) => { try { // Authenticate user const user_ip = req.connection.remoteAddress ?? ''; - const session_id = req.params.session_id; - const session_key = req.params.session_key; + const session_id = (req.query.session_id ?? '').toString(); + const session_key = (req.query.session_key ?? '').toString(); const user = await UserService.checkSession(session_id, session_key, user_ip); // Get info for price alarm creation diff --git a/Backend/src/models/pricealarms/pricealarms.router.ts b/Backend/src/models/pricealarms/pricealarms.router.ts index a5d01c5..6a73bca 100644 --- a/Backend/src/models/pricealarms/pricealarms.router.ts +++ b/Backend/src/models/pricealarms/pricealarms.router.ts @@ -24,8 +24,8 @@ pricealarmsRouter.get('/', async (req: Request, res: Response) => { try { // Authenticate user const user_ip = req.connection.remoteAddress ?? ''; - const session_id = req.params.session_id; - const session_key = req.params.session_key; + const session_id = (req.query.session_id ?? '').toString(); + const session_key = (req.query.session_key ?? '').toString(); const user = await UserService.checkSession(session_id, session_key, user_ip); const priceAlarms = await PriceAlarmsService.getPriceAlarms(user.user_id); diff --git a/Backend/src/models/vendors/vendors.router.ts b/Backend/src/models/vendors/vendors.router.ts index 75ccc35..383d6eb 100644 --- a/Backend/src/models/vendors/vendors.router.ts +++ b/Backend/src/models/vendors/vendors.router.ts @@ -37,8 +37,8 @@ vendorsRouter.get('/managed', async (req: Request, res: Response) => { try { // Authenticate user const user_ip = req.connection.remoteAddress ?? ''; - const session_id = req.params.session_id; - const session_key = req.params.session_key; + const session_id = (req.query.session_id ?? '').toString(); + const session_key = (req.query.session_key ?? '').toString(); const user = await UserService.checkSession(session_id, session_key, user_ip); const vendors = await VendorService.getManagedShops(user.user_id); From ce92abdb4002a8650fc284914937e6f624b61387 Mon Sep 17 00:00:00 2001 From: henningxtro Date: Tue, 15 Jun 2021 13:05:33 +0200 Subject: [PATCH 3/8] Doku (#88) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Added AC-ManageVendorShop.drawio * Update AC-ManageVendorShop.drawio * Added AC-ManageVendorShop.png * Added AC_VendorShop.drawio * Added Deployment_View.drawio * Update Deployment_View.drawio * Added AC_FavoriteShopList.drawio * Added Deployment_View.png * Added AC_FavoriteShopList.png * Added ERM.png * Adding architectural view * Updated Use-Case-Diagram Co-authored-by: Patrick <50352812+Mueller-Patrick@users.noreply.github.com> Co-authored-by: Patrick Müller --- doku/use-case-betterzon.drawio | 2 +- doku/use-case-betterzon.png | Bin 89170 -> 87271 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/doku/use-case-betterzon.drawio b/doku/use-case-betterzon.drawio index 5877876..1bf9b69 100644 --- a/doku/use-case-betterzon.drawio +++ b/doku/use-case-betterzon.drawio @@ -1 +1 @@ -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 \ No newline at end of file +5Vzbdps6EP0aP7YLxMXw6CRt0jY5Te1e0qcsGRSbFhAVOL58/ZHMxUZSbBcDxmnXagsDlmHPntFoZuSedhksrgmMpnfYRX4PKO6ip131ALAtQP9lgmUqMEwtFUyI56YidSMYeSuUCZVMOvNcFJduTDD2Ey8qCx0chshJSjJICJ6Xb3vCfvlbIzhBgmDkQF+U/vDcZJpKLdDfyG+QN5nm36yadnolgPnN2ZvEU+ji+ZZIe9fTLgnGSXoULC6Rz7DLcUk/9/6Fq8WDERQmh3xgdQ3AzZfhE1FV7e7j8jF8+HX1JhvlGfqz7IWHaOLFCSLIpfJvMSLZ0yfLHBL6IhE7nAX+wEkw6WkXz4gkHgXtFo6Rf49jL/FwSG8Z4yTBwdYNA9+bsAsJjqh0mgQ+PVHpofg2+aPRT6LFlih7u2uEA5SQJb0lv6plSC+58/lGcblouqUzM5PBjCqTYuQNmvQgA/QvwNUFcAUsUegOGEvpWYhDdCAmyC2RVkRk640NyRvnMoJ8mHjPZarLYMi+4R579EkKwIFSBtzigIzxjDgo+9A2M7lxTH33OAkkE5QI46x1Urx0dTUZ/5iaVEWtqKh9Cm9YUeYrVxRvB9UVdWKLyh97S1MjBIkzXc/AdEZR7gl2Z04i6s/36czO9DafegkaRdBhV+Y0tijr8snz/Uvss9mHfk5zIbKeHCqPE4J/o60rpmOh8VM9MwxQjRKsmiHOMCrYQZDapxhVnMBfl00IzgvUZBLCQE3bBBA0NUYJDbRWOHy7WK4EtVFOJmVdlbmd6XLbEDIRzIIsh+oUEUn0FXiu679kZATPQhexV1HqsRrN1kvI26LR6BIC8fqpz2Y0QRPfQnLGYS/nlHRDwLfVsFft78O3B0yfcXtMUTYn7Gg0pcgA5fM8bAt5PEt8L6TWlK8ba2I7rw5bF+neqjqAGN/e4okXnvncW+B8srkXiDy/mMWUU3FMpek6msA1MStD3QBwtsQ/tAycJQAnIrQraKFgkOVDZrPrk5/s5K2Rn14tti9eLfeZdxpEHDBnpEHCAaFvR8InQy8r31Qqhk+GXR7I4NnRcPgE7PPjzIGUyR10RygDuDjZMKoxps8vZrlxGiZMPsfWvzLar/j+oZrvd0rzvLPoqxVVzzsL02xZ92Lm9Q6GLNPPMg+ew/4f+JAEcfWZ+SRBkK6YZaM6eRCkHZs9bd8v5/52r3nmNOqMeZY9KgAVzbNIW+Usymty9ZvnzfgCDD7+UWdfww+Pf0bq/Kv+aUfR6czMkQ+tdUnFqTFzlEJ7bMmpG5H1LtZ0xBhVwMXDesXAWu1zHLIbC6ylsB5bVOluXN2xpZjFeW8+4XMwYbgyN+CLRA0TRlyIDf/V3F5fkspuKrcn94k7At2B4+BZeO4ltr556ilVFSPcQRT57JnTWqbI+HvICOpF3Uv+WSePUNTGqvjbE8cuz7U/0uhW3A9MziSqhhoaRwaz5VBDUhjqUKxxHGW6lcPj8i921aK5ymWErH5jjBn8Z1pXweMXTRl+d/+Edw8r/csbsVL7YgDhBetOzm26VAwk1iMN4mgTOmRj0++Y0NdwqPumDp4eXSNIHlVgLejft1E4qSPE4NcVEoctI04dIYZUBWKEMVrSYC8QFCH2Kxzeh0BQ7K3geD0UAzxihFq/iXHRM67YWLOEKnDdHVxX3ZxLdBuSYM6UIF1HX4IUadE7XhI4Zx9jEfS5pSr5yMNoM1UpxbfTVcdd7m979tnFnI5MPrzieYUe3LHFjcOXLhueeyRNjD8ItTOmEEz/uYIJHENqf+dll5ptd8wuj+5hRAsvedg63jJLeraxSnZyvFFKins7+dMRq+SLe4I5VS3u6c11AshxBQJdXjTFPDh0lr4Xuoho+41ynLY/3o4LAXR+T9ZNkZ/TtFImz6MR41SWbJgvZI73BDB8M3h9hizGikMEXSp5IjTefjUuU7dEoFt2mZWSKC6Mp+vGXrUMKpPfQ9aLHK4lQNEKSPNNb6B1P5uzab+jBZ12tGbVbVFCF4XWsqOtlK45M5IpZ0oyLk3Qr5rhMbjyo9lyhgeIUXYPmDBgfn+dVS+feaHjz1xUCCelW7IznqNUZaPsVLaqKxiMIxRKshRFuqhEbZ8llS6K2IDbglGFxSeopB7M/goZcdWsh+q6VZM/Nfc55hqp/ul65Q2vYfyc/L79+mD+GiuhpO3lAHd6zlu1atu+KI7UsKoOyDvXviLtRiPcz2+/hs+Li9Xw5uPsuz1WxtHltGOtN5paZkflTgqdIyzQuYa6hlkmLpdixB4vylpUIWtRFYnX6bWSwW8R77e5VpKhLJbva0W5AczsNrcVSzF77TvtdauuqYofyeKL8w37kGNL6uemKQHfyj+J0LKixOoTWzz4eCLo69Vs/OZ1ZwNJqaGxEqtMCWLv4ocg8lHA8HL/HUVYsi2gTSliV0Qp61t8D59xVmf7Tl0XJieofAvQShTwMtpKeZ1ZrIvamM6laAMB7YFL6a6EaN6r4bdYasCMLxoXzDsZZkcvAY9aznGzb22N8i/T41QTfJEBzDVftV2Ab4tvrl1ACuLRO2+kKQON+7M7g0BP7hHx6KuwSad2OknaUbrIJy49oFUl1JtiSsxHaplSksZzN/DC9GclWOs5x6+291Ic5fH5vRSmIcYkTe2lkKItrnnvs40UG9CPauc/STDCW4PZ5n4KKc71rFj/1qPtMrC9Ds08pUPTuYnNrOrP+FWA8Fsgld0ZPd38jm16++bHgLV3/wM= \ No newline at end of file diff --git a/doku/use-case-betterzon.png b/doku/use-case-betterzon.png index da2f4676628978dc3af0de905bc8004a5fed3dfd..0dfff10a9395cf2cd8242e78c6e32e10d3ad1bac 100644 GIT binary patch literal 87271 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 literal 89170 zcmb@tc_5Tu*grf(wz4m!DZ6BAFc^v$W-*2tV=$&DW^6Nt!5F(Nl_*;&MfN3aq)m}f zN~!G0lA`jBB(h8DJyU(3=Y5{v@;-mO|J=s8&wZBbT>IxbsYFN2W>G~^2n4d(4r@z- zK=`2$$Oek=M$nRJ1-}7-Y`V=sQ8=tf-+(|Lh=!5PpI;h=F#q5%j)sw~hM}Pso2^d| z@bU}wVuk4k`EWoJc+U!^2lxi~(Es!?gc-v03=H*PMr4?ohLJU#_kbDd8^DdIfBJj* z`2_tP&{!V^2GDW~2%-l^gn^%qWbiP6fo3Bl_yt~=!2kS=G=c8|E!J#yppTo6w|xMZ z9c^r6s&8Zhnzih)WCy&4p$+&Q7{K%ae=t5YW-#v)8~@N?7HB~uO!Q&;a6>pu-@pt3 zUO0RCdW8o3zlP!M#)sqO_h%;t0TDJxLjx8fFq##_;hG%ucXj@=1FlbKSU_;l-)=_w zV8LJ!ystS?Y@a{PbRTX24a{n&VT1zI{7W{_CEzcioX~DGHy=7VD9{J%YHAY9vc>Rd z40;54f#v=tI1$iF&*0A>#;(!cbat2tiU{)}M!Vx99Vl>^OOTft&YSFrF(%TCO`@o1 zWSAQh=>m6T5DX#_IO}LHXZO%>_W)x%4MQZ(A>6^q-QCP53hu=q`MIM(8#W{$3<>uQ zhMA$QqpXcXV3^2o7i&Lz3z#G80 zY?O&RKERa=^93#5Xj4QO%Y^6%jueRsv-LCfHO4V*8HNZWB#P=C;fq1iP;etkguQDd zE!f@B&ovwq70x?RUkBbNZjLCDb6})FbOha+VhtL=VIYlcVPp!!C!7fWL34vm!+ir; zMo})LNWU z2m9NZ1QMNyVGe8?mT?3;ga*c7g!{2wjH6ft#|UG0QZ$@5A{8CLatI0XqWe2pn*sJl z2BHzHaJ-ud&NZ0hOtcRIO>lcS$tIABG9cP}!wqO5WQq|H9Tj5gZ{z3)h9I%1MtFCW ziK`nqC<@IqGO=^=h1nvk4UiOTG#-s*GDv}V6ITq%&d7<03kwKkqNykYsaH73IiUzfeFrGHb_@L3Jva#bU@hI!|m~A!GXp>Gy>iWP(8wh z=^tqCPeDZmQJshsS2IV0K=37t%|`pU@b-c=b2N+!3Xi0O2Kf5eVnRbh+~}tEEMrrW z0g8;YW12>TPIg>|v#*ye4eJxZG(ejba!_w)0gPy62x*waU<}ilt@N+goziC;Y6muk>Rdx)&_W6-bPF?)}-isP);BQZeHt=QRT#(#ADmv8F zl}hmrcQ!V%bw*Jl$kAw8NFV`4#WE=&SgsEZ9Zh0-N7!-goO~jkIT)|7ND|B2H3S}r zafb!lMH0e;2-L7hB+3B6K=|RwLBYmsLz0(us0kexYGi^y0tJM$Hnhev9698GP&+es zV+4x^4|agz;bFlhCQgy?Fc`wdF@#KW3k!3`7y>?HnT_X?AeyAUlQ=m(4^X-3ei)U?jXX3u%Oij4&mH67UhUP>QLs z55>gAI+{);u(3Fdmp2(3?HfQ23=RN(HykBwF8`J$f1IF(Z&wmq;M?S3&)HiMcGn)eHj73G9U?KCOa{xO! zjN@qUZ|G00qy!t{fxSZ$+?jq}41?fEybZ^hjdh`h zxMG70X)e|zn3)|CZ4?SOvZouO7_K3BcPh@EY-kYR;!Vc{n*~r^FjxeFg0KN96ixCc zU`#N6SYI^VDaxJZ8~`U6`G&LoL!FJ?S%wCo4uQTL6pU`>8v*w>aIkjdnBv)Rl&_m< zbeKEV*^wJgfZ2w)bKQ*@;RI_VUjhs5V#G9!FksS&jtn!Zm#crMQ4q$69ZIAIn7X^! z_+q0&XpSZUuFMF6w*#DI65vimGHKWl0v6+BMsx`dv}Msq{wxF6U>~@BFrCcP^K=rR z1Tr{0!Vn$GKmt9Ac8?CHzAj3>>pqXlff_X*Z{NWfH z4i!w}*umgr8+S(+q?Y=ANhb8!#iu)}J0nUp>#WOJ`0imwW_8fvA9UtLO3k&186WI~L zfi84+3dtSKcJpH!Q4OP_je|ImY@8VpZOsfM+SnUMx|-05VF+M&d?VZt#!RNaVIVQW z&j1tR?!>S)qeldi33jeHF5ECIk`=&Y;oRt4TSI2FKikZgL?CmpQ;ruXOE-pAPE(&H% zCm09WM7z`Jp(JZB7ka3HnE^MN!SMoK6O!Q$qq~Q&y(1!+OqQ3cD;yQ&?Z*b=;E~~G zG)e%P8ydz43FA6BL{X6l8;qSV(G+-Kras{$taqqwgo_P}=IUaKV;BVxT-dIT2quw= zwKrfo*nu_JGyMYX-DozUF1D^*Yh%2TgROUvZ)lVu%-hH(oF|BIvROC>=3wAr7-UB= z3&9%U9c*3kW-v21vaeAXnu+j*0S-mdxpdIkn;1f(;tZK?1e!gK>w}~t+@rutpf;!> zZm!q>q#eNz1-wCIl#h3m37$dnrP{UADGCGK2M25TByV=u_p};Q; z@?!WKqNA;iT*HEFU`9Nlc8_NAW(*5=jj%C67`jDL;3xyv5IY}Q6b&EhOr!;s?bjp5CMKmrFE{QcL5{_RkM z|NllPMyQqf^Y##kGQ`f-njGo*rE&8)=ka?p>z(a*LnAxQd8usC4bua=9%fUm7;>^h z?JtfG%!Lpm1mzl9vWSM+XOeX8hFFT|0mG8+T= zaQpqHwHASM5Sc^#cqowdg8;aYTYesUJxfGf2Fu*$nnO=JW3;SpscNkTAYC zkV6|2t~oK`r@k>37B@ncQ3o$BGa>f{M^zJqAW$K;M8bTx)9IA5s5Uf)@U&m7`}M^9 zym`XG)=0fqBOZ%P9Wl!~82d62=W4VB>cR zoE0#=_=uXe=nlcrlcJe^rAdi9IyOLbA+W04U2^T1 z)b?yEih`W#f?{fJ)Cm3^wltwKpgcMtFXc%3{kPc=aeie3E7jD>Wb7=_W6pNT6+#g$ zmT!Jn8h+}~<&*#9eo`?|(^%zX|5!W%2~*K5wgJZpmxur1lGBoWcI^8)+g=q5#nKj3 z9DWfb0-|Tzm0H#D_4^-5>5x8_ZC==s&dxfQor&#AE;@2lJ3{%V&bN zx)A9-&r8dc3H<(+5IPp+vC#NtvU$o$%PX`WtZgaK5~|$OHcU8By}7G!uFeO68?j2%7ygg&i4Ca zdw10Ksx1^(rdX`kUEC#?cPy)BEKB}yPyOZ_JJZv;9vv(se7z6v>FQO?h!hZdHQd{m z`muLuf`f}F(-mp?h{P+~^B9<-?EWu9)(=;xzAI39r>E+0F{>)emd^zz!IhSHH|dp| z7W*kx9Wmt1y@BoM%@d%)Vbn(i}-|N!) zvo7&J3aSbTKGNRu$_VHNi?e~LKsN!Izhwhjx!&F5BLB|vTRZ$;73OKp1|4@$LIDwEHNaSwEa6V(tha0RO|Uf7Pir7`ZCR$wG~{ zlxJuEYOOsy9@;4nW~-%K-}6`N?Ep0WTuXi|EqFxc4`E=5f$E1~blMfpkY*vNJ79Ex z^+y>_oPlJr{jVnT&e-ZdG~`jBAzfgX{lE&MbqA&YYX20_I^A0OT;_kSrDugxo_M$X zyM<`p7TQR1_F%c9Xp@J3_N%A{_IrY_`yAoR-(!R&(g8bT&lb0jM;)>8DGto|LtePG zm1z>~!K1OruBk=w%^Qs3gSV2U|(Q1oAemGF;XTlxF< z?{nMIxA_%X#Bjgq)xAlYn+v^rK>x>>#Np;+o3~LVpa{u87AsD;S)Wzw@N}CzRK)88 z@-Hz%`19nUMrmnjKbLiC?t4F&s&0t>xbkFM@aWr^nay`@-(FWs&{Gt8n;WBx_^#SI zWAw*J>=5yHWp5Iiy=apno`^R7j+<#*-tpw*R-3^GBBQnkSB-yIiivL)O7Zw(0~3#k z_&c+6a&u=qZqT0{Y1RR7DDFYuH{W3f)M^R`a1woc`93kp&Ki9coUGXO}bQ5lE=Ul+4AS4IXa#P@Z1viL>#L~4SjVB5)tul3B4 znfT=f?+W$9v&l-g9(;SUZJu-gtW9SUO){Yba%>>*&X}N};A^4emX`RYrlMDj%}X=y z_K}^OytcsoiSb}x-7an(f+>#@dwNJYIXT65?{0CuA_v;Fw6qci1CMq4{~##{r#uqg zm@F*7@6Ti=cYd;AGIibrnNq3LQI7ey)lWrbmo8nJ{;@j0-NC^j+dfzSe5_^Bpm%Mo zuStHVAb+Anqvvji#)6G(TpPd3B<9Hc6+*&V<9Ga^H&?o=d^9rl*(nV|4W$-IY>%Dn zsd(RhMyE(%_G-@!#b-4NElz@?PaZyen6E4Ud`r{2eXVrEaTgaCLCnc5UOOyfBSA1A zSKYWoCA+$Eb)Y>j^N-+YG_{UGixWnE9iy$OGSh7t+ri4u|t5=r(nJC;pr=+0AYLlZ@>rT9SqQ z-ae9zVSjyN2HhJe8MFL#ab~!Vu&^4teRXv;*x1yxNxXPR!k)+a*H;&0M&mozE!P|M zBN%<5ek$1pZIhh01|jcT z`_CKs$rB39okS8j*)CSe#8T5fp-0uISt@SX6{a36K%{*AE=N@O1&#{n zss3wWrY0uG?t9LhfOu}4tu?g2uxGQt-FH_6&aXA%l*68%^c563nwV+g)?_4pb9h?J zVn=84P2ZP{qJ4+syPsyOy{gf`=z{B>E^w6 z7h#HTW}Jmh8}LjjTk`Ys+`5fo zp&Tmv2nM5i=k7^Wen7)9lBv;hOn8)Uw(*FtxLMe>LYESB6Y(a?8HdC5zv}B7aINuV zZAY++6@S*I3kV;$%jOeP&|ffy!y`w6Obd?K?`N7-9D^*c^|4(7�i(+53y4uI;_ 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 Date: Tue, 15 Jun 2021 15:58:54 +0200 Subject: [PATCH 4/8] BETTERZON-147, BETTERZON-148: Adding feature files (#89) --- CucumberTests/src/test/java/RunTest.java | 8 +++-- .../test/java/stepdefs/FavoriteShopList.java | 27 ++++++++++++++++ .../src/test/java/stepdefs/ManageVendor.java | 31 +++++++++++++++++++ .../test/resource/favoriteShopList.feature | 20 ++++++++++++ .../src/test/resource/manageVendor.feature | 15 +++++++++ 5 files changed, 98 insertions(+), 3 deletions(-) create mode 100644 CucumberTests/src/test/java/stepdefs/FavoriteShopList.java create mode 100644 CucumberTests/src/test/java/stepdefs/ManageVendor.java create mode 100644 CucumberTests/src/test/resource/favoriteShopList.feature create mode 100644 CucumberTests/src/test/resource/manageVendor.feature diff --git a/CucumberTests/src/test/java/RunTest.java b/CucumberTests/src/test/java/RunTest.java index fcbc954..7614dc3 100644 --- a/CucumberTests/src/test/java/RunTest.java +++ b/CucumberTests/src/test/java/RunTest.java @@ -8,14 +8,16 @@ import stepdefs.Preconditions; @RunWith(Cucumber.class) @CucumberOptions( - features = {"src/test/resource/searchProduct.feature", - "src/test/resource/priceAlarms.feature"} + features = {"src/test/resource/searchProduct.feature", + "src/test/resource/priceAlarms.feature", + "src/test/resource/favoriteShopList.feature", + "src/test/resource/manageVendor.feature"} ) public class RunTest { @BeforeClass public static void setup() { - Preconditions.driver= new FirefoxDriver(); + Preconditions.driver = new FirefoxDriver(); } @AfterClass diff --git a/CucumberTests/src/test/java/stepdefs/FavoriteShopList.java b/CucumberTests/src/test/java/stepdefs/FavoriteShopList.java new file mode 100644 index 0000000..fa94b68 --- /dev/null +++ b/CucumberTests/src/test/java/stepdefs/FavoriteShopList.java @@ -0,0 +1,27 @@ +package stepdefs; + +import io.cucumber.java.en.Given; +import io.cucumber.java.en.Then; +import io.cucumber.java.en.When; + +public class FavoriteShopList { + @Given("^the user has at least (\\d+) favorite shop$") + public void the_user_has_at_least_favorite_shop(int arg1) throws Exception { + } + + @When("^the user clicks on favorite shops$") + public void the_user_clicks_on_favorite_shops() throws Exception { + } + + @Then("^he should see his favorite shops list$") + public void he_Should_see_his_favorite_shops_list() throws Exception { + } + + @When("^he clicks on delete a favorite shop entry$") + public void he_clicks_on_delete_a_favorite_shop_enty() throws Exception { + } + + @Then("^the favorite shop entry should be deleted$") + public void the_favorite_shop_entry_should_be_deleted() throws Exception { + } +} diff --git a/CucumberTests/src/test/java/stepdefs/ManageVendor.java b/CucumberTests/src/test/java/stepdefs/ManageVendor.java new file mode 100644 index 0000000..5ad254f --- /dev/null +++ b/CucumberTests/src/test/java/stepdefs/ManageVendor.java @@ -0,0 +1,31 @@ +package stepdefs; + +import io.cucumber.java.en.Given; +import io.cucumber.java.en.Then; +import io.cucumber.java.en.When; + +public class ManageVendor { + @Given("^the user is logged in as vendor manager$") + public void the_user_is_logged_in_as_vendor_manager() throws Exception { + } + + @When("^the user opens the shop managing page$") + public void the_user_opens_the_shop_managing_page() throws Exception { + } + + @When("^the user clicks on deactivate a listing$") + public void the_user_clicks_on_deactivate_a_listing() throws Exception { + } + + @Then("^the listing should be deactivated$") + public void the_listing_should_be_deactivated() throws Exception { + } + + @When("^the user clicks on deactivate the shop$") + public void the_user_clicks_on_deactivate_the_shop() throws Exception { + } + + @Then("^the shop and all related listings should be deactivated$") + public void the_shop_and_all_related_listings_should_be_deactivated() throws Exception { + } +} diff --git a/CucumberTests/src/test/resource/favoriteShopList.feature b/CucumberTests/src/test/resource/favoriteShopList.feature new file mode 100644 index 0000000..079e781 --- /dev/null +++ b/CucumberTests/src/test/resource/favoriteShopList.feature @@ -0,0 +1,20 @@ +Feature: Favorite Shop List + + Scenario: Access Favorite Shop List + Given the user is on the landing page + And the user is logged in + And the user has at least 1 favorite shop + When the user clicks on the profile icon + Then the profile details popup should open + When the user clicks on favorite shops + Then he should see his favorite shops list + + Scenario: Remove Favorite Shop Entry + Given the user is on the landing page + And the user is logged in + And the user has at least 1 favorite shop + When the user clicks on the profile icon + Then the profile details popup should open + When the user clicks on favorite shops + And he clicks on delete a favorite shop entry + Then the favorite shop entry should be deleted diff --git a/CucumberTests/src/test/resource/manageVendor.feature b/CucumberTests/src/test/resource/manageVendor.feature new file mode 100644 index 0000000..b63d647 --- /dev/null +++ b/CucumberTests/src/test/resource/manageVendor.feature @@ -0,0 +1,15 @@ +Feature: Manage Vendor Shop + + Scenario: Deactivate Product Listing + Given the user is on the landing page + And the user is logged in as vendor manager + When the user opens the shop managing page + And the user clicks on deactivate a listing + Then the listing should be deactivated + + Scenario: Deactivate Shop Completely + Given the user is on the landing page + And the user is logged in as vendor manager + When the user opens the shop managing page + And the user clicks on deactivate the shop + Then the shop and all related listings should be deactivated From 7f43d27a79c4131ab66b0b14783bd1d1a880ccce Mon Sep 17 00:00:00 2001 From: henningxtro Date: Tue, 15 Jun 2021 23:34:31 +0200 Subject: [PATCH 5/8] Repaired API Tests (#90) --- ...etterzon_API_Tests.postman_collection.json | 3896 +++++++++-------- 1 file changed, 1978 insertions(+), 1918 deletions(-) diff --git a/tests/Betterzon_API_Tests.postman_collection.json b/tests/Betterzon_API_Tests.postman_collection.json index dfa60ed..fdf4686 100644 --- a/tests/Betterzon_API_Tests.postman_collection.json +++ b/tests/Betterzon_API_Tests.postman_collection.json @@ -1,1920 +1,1980 @@ { - "info": { - "_postman_id": "76b7db80-557f-44a6-8b86-f393beed8f86", - "name": "Betterzon API Tests", - "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json" - }, - "item": [ - { - "name": "Categories", - "item": [ - { - "name": "GET all categories", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "pm.test(\"Verify status code\", function() {\r", - " pm.response.to.have.status(200);\r", - "});\r", - "\r", - "pm.test(\"Verify body to be json\", function() {\r", - " pm.response.to.be.json;\r", - "});" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "https://backend.betterzon.xyz/categories/", - "protocol": "https", - "host": [ - "backend", - "betterzon", - "xyz" - ], - "path": [ - "categories", - "" - ] - } - }, - "response": [] - }, - { - "name": "GET single category", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "pm.test(\"Verify status code\", function() {\r", - " pm.response.to.have.status(200);\r", - "});\r", - "\r", - "pm.test(\"Verify body to be json\", function() {\r", - " pm.response.to.be.json;\r", - "});" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "https://backend.betterzon.xyz/categories/1", - "protocol": "https", - "host": [ - "backend", - "betterzon", - "xyz" - ], - "path": [ - "categories", - "1" - ] - } - }, - "response": [] - }, - { - "name": "GET categories by query", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "pm.test(\"Verify status code\", function() {\r", - " pm.response.to.have.status(200);\r", - "});\r", - "\r", - "pm.test(\"Verify body to be json\", function() {\r", - " pm.response.to.be.json;\r", - "});" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "https://backend.betterzon.xyz/categories/search/Elektro", - "protocol": "https", - "host": [ - "backend", - "betterzon", - "xyz" - ], - "path": [ - "categories", - "search", - "Elektro" - ] - } - }, - "response": [] - } - ] - }, - { - "name": "Contact Persons", - "item": [ - { - "name": "GET all contact persons", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "pm.test(\"Verify status code\", function() {\r", - " pm.response.to.have.status(200);\r", - "});\r", - "\r", - "pm.test(\"Verify body to be json\", function() {\r", - " pm.response.to.be.json;\r", - "});" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "https://backend.betterzon.xyz/contactpersons", - "protocol": "https", - "host": [ - "backend", - "betterzon", - "xyz" - ], - "path": [ - "contactpersons" - ] - } - }, - "response": [] - }, - { - "name": "GET single contact person", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "pm.test(\"Verify status code\", function() {\r", - " pm.response.to.have.status(200);\r", - "});\r", - "\r", - "pm.test(\"Verify body to be json\", function() {\r", - " pm.response.to.be.json;\r", - "});" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "https://backend.betterzon.xyz/contactpersons/1", - "protocol": "https", - "host": [ - "backend", - "betterzon", - "xyz" - ], - "path": [ - "contactpersons", - "1" - ] - } - }, - "response": [] - }, - { - "name": "GET contact persons by vendor", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "pm.test(\"Verify status code\", function() {\r", - " pm.response.to.have.status(200);\r", - "});\r", - "\r", - "pm.test(\"Verify body to be json\", function() {\r", - " pm.response.to.be.json;\r", - "});" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "https://backend.betterzon.xyz/contactpersons/byvendor/1", - "protocol": "https", - "host": [ - "backend", - "betterzon", - "xyz" - ], - "path": [ - "contactpersons", - "byvendor", - "1" - ] - } - }, - "response": [] - }, - { - "name": "POST new contact person", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "pm.test(\"Verify status code\", function() {\r", - " pm.response.to.have.status(201);\r", - "});" - ], - "type": "text/javascript" - } - }, - { - "listen": "prerequest", - "script": { - "exec": [ - "pm.sendRequest({\r", - " url: 'https://backend.betterzon.xyz/users/login',\r", - " method: 'POST',\r", - " header: 'content-type:application/json',\r", - " body: {\r", - " mode: 'raw',\r", - " raw: JSON.stringify({\r", - " username: pm.collectionVariables.get(\"testuser_username\"),\r", - " password: pm.collectionVariables.get(\"testuser_password\")\r", - " })\r", - " }\r", - "}, function (err, response) {\r", - " pm.expect(err).to.not.be.ok;\r", - "});" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "POST", - "header": [], - "body": { - "mode": "raw", - "raw": "{\r\n \"vendor_id\": 7,\r\n \"first_name\": \"Test\",\r\n \"last_name\": \"Contact\",\r\n \"gender\": \"Unix\",\r\n \"email\": \"testcontact@betterzon.xyz\",\r\n \"phone\": \"+49 123 456789\"\r\n}", - "options": { - "raw": { - "language": "json" - } - } - }, - "url": { - "raw": "https://backend.betterzon.xyz/contactpersons/", - "protocol": "https", - "host": [ - "backend", - "betterzon", - "xyz" - ], - "path": [ - "contactpersons", - "" - ] - } - }, - "response": [] - }, - { - "name": "PUT update contact person", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "pm.test(\"Verify status code\", function() {\r", - " pm.response.to.have.status(200);\r", - "});" - ], - "type": "text/javascript" - } - }, - { - "listen": "prerequest", - "script": { - "exec": [ - "pm.sendRequest({\r", - " url: 'https://backend.betterzon.xyz/users/login',\r", - " method: 'POST',\r", - " header: 'content-type:application/json',\r", - " body: {\r", - " mode: 'raw',\r", - " raw: JSON.stringify({\r", - " username: pm.collectionVariables.get(\"testuser_username\"),\r", - " password: pm.collectionVariables.get(\"testuser_password\")\r", - " })\r", - " }\r", - "}, function (err, response) {\r", - " pm.expect(err).to.not.be.ok;\r", - "});" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "PUT", - "header": [], - "body": { - "mode": "raw", - "raw": "{\r\n \"vendor_id\": 7,\r\n \"first_name\": \"Test\",\r\n \"last_name\": \"Contact\",\r\n \"gender\": \"Unix\",\r\n \"email\": \"testcontact@betterzon.xyz\",\r\n \"phone\": \"+49 123 456789\"\r\n}", - "options": { - "raw": { - "language": "json" - } - } - }, - "url": { - "raw": "https://backend.betterzon.xyz/contactpersons/2", - "protocol": "https", - "host": [ - "backend", - "betterzon", - "xyz" - ], - "path": [ - "contactpersons", - "2" - ] - } - }, - "response": [] - } - ] - }, - { - "name": "Crawling Status", - "item": [ - { - "name": "GET crawling status", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "pm.test(\"Verify status code\", function() {\r", - " pm.response.to.have.status(200);\r", - "});\r", - "\r", - "pm.test(\"Verify body to be json\", function() {\r", - " pm.response.to.be.json;\r", - "});" - ], - "type": "text/javascript" - } - }, - { - "listen": "prerequest", - "script": { - "exec": [ - "pm.sendRequest({\r", - " url: 'https://backend.betterzon.xyz/users/login',\r", - " method: 'POST',\r", - " header: 'content-type:application/json',\r", - " body: {\r", - " mode: 'raw',\r", - " raw: JSON.stringify({\r", - " username: pm.collectionVariables.get(\"testuser_username\"),\r", - " password: pm.collectionVariables.get(\"testuser_password\")\r", - " })\r", - " }\r", - "}, function (err, response) {\r", - " pm.expect(err).to.not.be.ok;\r", - "});\r", - "" - ], - "type": "text/javascript" - } - } - ], - "protocolProfileBehavior": { - "disableBodyPruning": true - }, - "request": { - "method": "GET", - "header": [], - "body": { - "mode": "raw", - "raw": "", - "options": { - "raw": { - "language": "json" - } - } - }, - "url": { - "raw": "https://backend.betterzon.xyz/crawlingstatus", - "protocol": "https", - "host": [ - "backend", - "betterzon", - "xyz" - ], - "path": [ - "crawlingstatus" - ] - } - }, - "response": [] - } - ] - }, - { - "name": "Favorite Shops", - "item": [ - { - "name": "GET favorite shops", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "pm.test(\"Verify status code\", function() {\r", - " pm.response.to.have.status(200);\r", - "});\r", - "\r", - "pm.test(\"Verify body to be json\", function() {\r", - " pm.response.to.be.json;\r", - "});" - ], - "type": "text/javascript" - } - }, - { - "listen": "prerequest", - "script": { - "exec": [ - "pm.sendRequest({\r", - " url: 'https://backend.betterzon.xyz/users/login',\r", - " method: 'POST',\r", - " header: 'content-type:application/json',\r", - " body: {\r", - " mode: 'raw',\r", - " raw: JSON.stringify({\r", - " username: pm.collectionVariables.get(\"testuser_username\"),\r", - " password: pm.collectionVariables.get(\"testuser_password\")\r", - " })\r", - " }\r", - "}, function (err, response) {\r", - " pm.expect(err).to.not.be.ok;\r", - "});\r", - "" - ], - "type": "text/javascript" - } - } - ], - "protocolProfileBehavior": { - "disableBodyPruning": true - }, - "request": { - "method": "GET", - "header": [], - "body": { - "mode": "raw", - "raw": "", - "options": { - "raw": { - "language": "json" - } - } - }, - "url": { - "raw": "https://backend.betterzon.xyz/favoriteshops", - "protocol": "https", - "host": [ - "backend", - "betterzon", - "xyz" - ], - "path": [ - "favoriteshops" - ] - } - }, - "response": [] - }, - { - "name": "POST create favorite shop entry", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "pm.test(\"Verify status code\", function() {\r", - " pm.response.to.have.status(201);\r", - "});\r", - "\r", - "pm.test(\"Verify body to be json\", function() {\r", - " pm.response.to.be.json;\r", - "});" - ], - "type": "text/javascript" - } - }, - { - "listen": "prerequest", - "script": { - "exec": [ - "pm.sendRequest({\r", - " url: 'https://backend.betterzon.xyz/users/login',\r", - " method: 'POST',\r", - " header: 'content-type:application/json',\r", - " body: {\r", - " mode: 'raw',\r", - " raw: JSON.stringify({\r", - " username: pm.collectionVariables.get(\"testuser_username\"),\r", - " password: pm.collectionVariables.get(\"testuser_password\")\r", - " })\r", - " }\r", - "}, function (err, response) {\r", - " pm.expect(err).to.not.be.ok;\r", - "});\r", - "" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "POST", - "header": [], - "body": { - "mode": "raw", - "raw": "{\r\n \"vendor_id\": 7\r\n}", - "options": { - "raw": { - "language": "json" - } - } - }, - "url": { - "raw": "https://backend.betterzon.xyz/favoriteshops", - "protocol": "https", - "host": [ - "backend", - "betterzon", - "xyz" - ], - "path": [ - "favoriteshops" - ] - } - }, - "response": [] - }, - { - "name": "DELETE favorite shop entry", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "pm.test(\"Verify status code\", function() {\r", - " pm.response.to.have.status(201);\r", - "});\r", - "\r", - "pm.test(\"Verify body to be json\", function() {\r", - " pm.response.to.be.json;\r", - "});" - ], - "type": "text/javascript" - } - }, - { - "listen": "prerequest", - "script": { - "exec": [ - "pm.sendRequest({\r", - " url: 'https://backend.betterzon.xyz/users/login',\r", - " method: 'POST',\r", - " header: 'content-type:application/json',\r", - " body: {\r", - " mode: 'raw',\r", - " raw: JSON.stringify({\r", - " username: pm.collectionVariables.get(\"testuser_username\"),\r", - " password: pm.collectionVariables.get(\"testuser_password\")\r", - " })\r", - " }\r", - "}, function (err, response) {\r", - " pm.expect(err).to.not.be.ok;\r", - " getNewFavId();\r", - "});\r", - "\r", - "\r", - "let getNewFavId = function() {\r", - " // Create a new shops entry so we can delete it afterwards\r", - " pm.sendRequest({\r", - " url: 'https://backend.betterzon.xyz/favoriteshops',\r", - " method: 'POST',\r", - " header: 'content-type:application/json',\r", - " body: {\r", - " mode: 'raw',\r", - " raw: JSON.stringify({\r", - " vendor_id: 7\r", - " })\r", - " }\r", - " }, function (err, response) {\r", - " pm.expect(err).to.not.be.ok;\r", - " });\r", - "\r", - " // Get the id of the entry\r", - " pm.sendRequest({\r", - " url: 'https://backend.betterzon.xyz/favoriteshops',\r", - " method: 'GET'\r", - " }, function (err, response) {\r", - " pm.expect(err).to.not.be.ok;\r", - " pm.collectionVariables.set(\"created_favshop_id\", response.json()[0].favorite_id);\r", - " });\r", - "}" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "DELETE", - "header": [], - "body": { - "mode": "raw", - "raw": "", - "options": { - "raw": { - "language": "json" - } - } - }, - "url": { - "raw": "https://backend.betterzon.xyz/favoriteshops/4", - "protocol": "https", - "host": [ - "backend", - "betterzon", - "xyz" - ], - "path": [ - "favoriteshops", - "4" - ] - } - }, - "response": [] - } - ] - }, - { - "name": "Manufacturers", - "item": [ - { - "name": "GET all manufacturers", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "pm.test(\"Verify status code\", function() {\r", - " pm.response.to.have.status(200);\r", - "});\r", - "\r", - "pm.test(\"Verify body to be json\", function() {\r", - " pm.response.to.be.json;\r", - "});" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "https://backend.betterzon.xyz/manufacturers", - "protocol": "https", - "host": [ - "backend", - "betterzon", - "xyz" - ], - "path": [ - "manufacturers" - ] - } - }, - "response": [] - }, - { - "name": "GET single manufacturer", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "pm.test(\"Verify status code\", function() {\r", - " pm.response.to.have.status(200);\r", - "});\r", - "\r", - "pm.test(\"Verify body to be json\", function() {\r", - " pm.response.to.be.json;\r", - "});" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "https://backend.betterzon.xyz/manufacturers/1", - "protocol": "https", - "host": [ - "backend", - "betterzon", - "xyz" - ], - "path": [ - "manufacturers", - "1" - ] - } - }, - "response": [] - }, - { - "name": "GET manufacturers by query", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "pm.test(\"Verify status code\", function() {\r", - " pm.response.to.have.status(200);\r", - "});\r", - "\r", - "pm.test(\"Verify body to be json\", function() {\r", - " pm.response.to.be.json;\r", - "});" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "https://backend.betterzon.xyz/manufacturers/search/Apple", - "protocol": "https", - "host": [ - "backend", - "betterzon", - "xyz" - ], - "path": [ - "manufacturers", - "search", - "Apple" - ] - } - }, - "response": [] - } - ] - }, - { - "name": "Price Alarms", - "item": [ - { - "name": "GET all price alarms", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "pm.test(\"Verify status code\", function() {\r", - " pm.response.to.have.status(200);\r", - "});\r", - "\r", - "pm.test(\"Verify body to be json\", function() {\r", - " pm.response.to.be.json;\r", - "});" - ], - "type": "text/javascript" - } - }, - { - "listen": "prerequest", - "script": { - "exec": [ - "pm.sendRequest({\r", - " url: 'https://backend.betterzon.xyz/users/login',\r", - " method: 'POST',\r", - " header: 'content-type:application/json',\r", - " body: {\r", - " mode: 'raw',\r", - " raw: JSON.stringify({\r", - " username: pm.collectionVariables.get(\"testuser_username\"),\r", - " password: pm.collectionVariables.get(\"testuser_password\")\r", - " })\r", - " }\r", - "}, function (err, response) {\r", - " pm.expect(err).to.not.be.ok;\r", - "});" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "https://backend.betterzon.xyz/pricealarms", - "protocol": "https", - "host": [ - "backend", - "betterzon", - "xyz" - ], - "path": [ - "pricealarms" - ] - } - }, - "response": [] - }, - { - "name": "POST new price alarm", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "pm.test(\"Verify status code\", function() {\r", - " pm.response.to.have.status(201);\r", - "});\r", - "\r", - "pm.test(\"Verify body to be json\", function() {\r", - " pm.response.to.be.json;\r", - "});" - ], - "type": "text/javascript" - } - }, - { - "listen": "prerequest", - "script": { - "exec": [ - "pm.sendRequest({\r", - " url: 'https://backend.betterzon.xyz/users/login',\r", - " method: 'POST',\r", - " header: 'content-type:application/json',\r", - " body: {\r", - " mode: 'raw',\r", - " raw: JSON.stringify({\r", - " username: pm.collectionVariables.get(\"testuser_username\"),\r", - " password: pm.collectionVariables.get(\"testuser_password\")\r", - " })\r", - " }\r", - "}, function (err, response) {\r", - " pm.expect(err).to.not.be.ok;\r", - "});" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "POST", - "header": [], - "body": { - "mode": "raw", - "raw": "{\r\n \"product_id\": 1,\r\n \"defined_price\": 23400\r\n}", - "options": { - "raw": { - "language": "json" - } - } - }, - "url": { - "raw": "https://backend.betterzon.xyz/pricealarms", - "protocol": "https", - "host": [ - "backend", - "betterzon", - "xyz" - ], - "path": [ - "pricealarms" - ] - } - }, - "response": [] - }, - { - "name": "PUT update price alarm", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "pm.test(\"Verify status code\", function() {\r", - " pm.response.to.have.status(200);\r", - "});\r", - "\r", - "pm.test(\"Verify body to be json\", function() {\r", - " pm.response.to.be.json;\r", - "});" - ], - "type": "text/javascript" - } - }, - { - "listen": "prerequest", - "script": { - "exec": [ - "pm.sendRequest({\r", - " url: 'https://backend.betterzon.xyz/users/login',\r", - " method: 'POST',\r", - " header: 'content-type:application/json',\r", - " body: {\r", - " mode: 'raw',\r", - " raw: JSON.stringify({\r", - " username: pm.collectionVariables.get(\"testuser_username\"),\r", - " password: pm.collectionVariables.get(\"testuser_password\")\r", - " })\r", - " }\r", - "}, function (err, response) {\r", - " pm.expect(err).to.not.be.ok;\r", - "});" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "PUT", - "header": [], - "body": { - "mode": "raw", - "raw": "{\r\n \"alarm_id\": 12,\r\n \"defined_price\": 23400\r\n}", - "options": { - "raw": { - "language": "json" - } - } - }, - "url": { - "raw": "https://backend.betterzon.xyz/pricealarms", - "protocol": "https", - "host": [ - "backend", - "betterzon", - "xyz" - ], - "path": [ - "pricealarms" - ] - } - }, - "response": [] - } - ] - }, - { - "name": "Prices", - "item": [ - { - "name": "GET all prices", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "pm.test(\"Verify status code\", function() {\r", - " pm.response.to.have.status(200);\r", - "});\r", - "\r", - "pm.test(\"Verify body to be json\", function() {\r", - " pm.response.to.be.json;\r", - "});" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "https://backend.betterzon.xyz/prices/", - "protocol": "https", - "host": [ - "backend", - "betterzon", - "xyz" - ], - "path": [ - "prices", - "" - ] - } - }, - "response": [] - }, - { - "name": "GET single price", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "pm.test(\"Verify status code\", function() {\r", - " pm.response.to.have.status(200);\r", - "});\r", - "\r", - "pm.test(\"Verify body to be json\", function() {\r", - " pm.response.to.be.json;\r", - "});" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "https://backend.betterzon.xyz/prices/", - "protocol": "https", - "host": [ - "backend", - "betterzon", - "xyz" - ], - "path": [ - "prices", - "" - ] - } - }, - "response": [] - }, - { - "name": "GET best deals", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "pm.test(\"Verify status code\", function() {\r", - " pm.response.to.have.status(200);\r", - "});\r", - "\r", - "pm.test(\"Verify body to be json\", function() {\r", - " pm.response.to.be.json;\r", - "});" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "https://backend.betterzon.xyz/prices/bestDeals/10", - "protocol": "https", - "host": [ - "backend", - "betterzon", - "xyz" - ], - "path": [ - "prices", - "bestDeals", - "10" - ] - } - }, - "response": [] - }, - { - "name": "GET prices by list of products", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "pm.test(\"Verify status code\", function() {\r", - " pm.response.to.have.status(200);\r", - "});\r", - "\r", - "pm.test(\"Verify body to be json\", function() {\r", - " pm.response.to.be.json;\r", - "});" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "https://backend.betterzon.xyz/prices/byProduct/list/[1,2,3]", - "protocol": "https", - "host": [ - "backend", - "betterzon", - "xyz" - ], - "path": [ - "prices", - "byProduct", - "list", - "[1,2,3]" - ] - } - }, - "response": [] - }, - { - "name": "POST new price", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "pm.test(\"Verify status code\", function() {\r", - " pm.response.to.have.status(201);\r", - "});" - ], - "type": "text/javascript" - } - }, - { - "listen": "prerequest", - "script": { - "exec": [ - "pm.sendRequest({\r", - " url: 'https://backend.betterzon.xyz/users/login',\r", - " method: 'POST',\r", - " header: 'content-type:application/json',\r", - " body: {\r", - " mode: 'raw',\r", - " raw: JSON.stringify({\r", - " username: pm.collectionVariables.get(\"testuser_username\"),\r", - " password: pm.collectionVariables.get(\"testuser_password\")\r", - " })\r", - " }\r", - "}, function (err, response) {\r", - " pm.expect(err).to.not.be.ok;\r", - "});" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "POST", - "header": [], - "body": { - "mode": "raw", - "raw": "{\r\n \"vendor_id\": 7,\r\n \"product_id\": 1,\r\n \"price_in_cents\": 123456\r\n}", - "options": { - "raw": { - "language": "json" - } - } - }, - "url": { - "raw": "https://backend.betterzon.xyz/prices", - "protocol": "https", - "host": [ - "backend", - "betterzon", - "xyz" - ], - "path": [ - "prices" - ] - } - }, - "response": [] - } - ] - }, - { - "name": "Products", - "item": [ - { - "name": "GET all products", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "pm.test(\"Verify status code\", function() {\r", - " pm.response.to.have.status(200);\r", - "});\r", - "\r", - "pm.test(\"Verify body to be json\", function() {\r", - " pm.response.to.be.json;\r", - "})" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "https://backend.betterzon.xyz/products/", - "protocol": "https", - "host": [ - "backend", - "betterzon", - "xyz" - ], - "path": [ - "products", - "" - ] - } - }, - "response": [] - }, - { - "name": "GET single product", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "pm.test(\"Verify status code\", function() {\r", - " pm.response.to.have.status(200);\r", - "});\r", - "\r", - "pm.test(\"Verify body to be json\", function() {\r", - " pm.response.to.be.json;\r", - "})" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "https://backend.betterzon.xyz/products/1", - "protocol": "https", - "host": [ - "backend", - "betterzon", - "xyz" - ], - "path": [ - "products", - "1" - ] - } - }, - "response": [] - }, - { - "name": "GET products by query", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "pm.test(\"Verify status code\", function() {\r", - " pm.response.to.have.status(200);\r", - "});\r", - "\r", - "pm.test(\"Verify body to be json\", function() {\r", - " pm.response.to.be.json;\r", - "})" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "https://backend.betterzon.xyz/products/search/iPhone", - "protocol": "https", - "host": [ - "backend", - "betterzon", - "xyz" - ], - "path": [ - "products", - "search", - "iPhone" - ] - } - }, - "response": [] - }, - { - "name": "GET products by list of ids", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "pm.test(\"Verify status code\", function() {\r", - " pm.response.to.have.status(200);\r", - "});\r", - "\r", - "pm.test(\"Verify body to be json\", function() {\r", - " pm.response.to.be.json;\r", - "})" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "https://backend.betterzon.xyz/products/list/[1,2,3]", - "protocol": "https", - "host": [ - "backend", - "betterzon", - "xyz" - ], - "path": [ - "products", - "list", - "[1,2,3]" - ] - } - }, - "response": [] - }, - { - "name": "GET products by vendor", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "pm.test(\"Verify status code\", function() {\r", - " pm.response.to.have.status(200);\r", - "});\r", - "\r", - "pm.test(\"Verify body to be json\", function() {\r", - " pm.response.to.be.json;\r", - "})" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "https://backend.betterzon.xyz/products/vendor/1", - "protocol": "https", - "host": [ - "backend", - "betterzon", - "xyz" - ], - "path": [ - "products", - "vendor", - "1" - ] - } - }, - "response": [] - }, - { - "name": "POST new product", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "pm.test(\"Verify status code\", function() {\r", - " pm.response.to.have.status(201);\r", - "});" - ], - "type": "text/javascript" - } - }, - { - "listen": "prerequest", - "script": { - "exec": [ - "" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "POST", - "header": [], - "body": { - "mode": "raw", - "raw": "{\r\n \"asin\": \"B07X356256\"\r\n}", - "options": { - "raw": { - "language": "json" - } - } - }, - "url": { - "raw": "https://backend.betterzon.xyz/products", - "protocol": "https", - "host": [ - "backend", - "betterzon", - "xyz" - ], - "path": [ - "products" - ] - } - }, - "response": [] - } - ] - }, - { - "name": "Users", - "item": [ - { - "name": "POST user registration negative", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "pm.test(\"Verify status code\", function() {\r", - " pm.response.to.have.status(400);\r", - "});\r", - "\r", - "pm.test(\"Verify body to be json\", function() {\r", - " pm.response.to.be.json;\r", - "});" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "POST", - "header": [], - "body": { - "mode": "raw", - "raw": "{\r\n \"username\": \"Testuser\",\r\n \"password\": \"Testpassword\",\r\n \"email\": \"Wrongemail\"\r\n}", - "options": { - "raw": { - "language": "json" - } - } - }, - "url": { - "raw": "https://backend.betterzon.xyz/users/register", - "protocol": "https", - "host": [ - "backend", - "betterzon", - "xyz" - ], - "path": [ - "users", - "register" - ] - } - }, - "response": [] - }, - { - "name": "POST user registration positive", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "pm.test(\"Verify status code\", function() {\r", - " pm.response.to.have.status(201);\r", - "});" - ], - "type": "text/javascript" - } - }, - { - "listen": "prerequest", - "script": { - "exec": [ - "const customerId = Math.floor((Math.random()*10000 +1));\r", - "pm.collectionVariables.set(\"rand_user_id\", customerId);" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "POST", - "header": [], - "body": { - "mode": "raw", - "raw": "{\r\n \"username\": \"testuser_{{rand_user_id}}\",\r\n \"password\": \"supersecurepassword1234!\",\r\n \"email\": \"testuser_{{rand_user_id}}@betterzon.xyz\"\r\n}", - "options": { - "raw": { - "language": "json" - } - } - }, - "url": { - "raw": "https://backend.betterzon.xyz/users/register", - "protocol": "https", - "host": [ - "backend", - "betterzon", - "xyz" - ], - "path": [ - "users", - "register" - ] - } - }, - "response": [] - }, - { - "name": "POST user login positive", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "pm.test(\"Verify status code\", function() {\r", - " pm.response.to.have.status(200);\r", - "});" - ], - "type": "text/javascript" - } - }, - { - "listen": "prerequest", - "script": { - "exec": [ - "" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "POST", - "header": [], - "body": { - "mode": "raw", - "raw": "{\r\n \"username\": \"{{testuser_username}}\",\r\n \"password\": \"{{testuser_password}}\"\r\n}", - "options": { - "raw": { - "language": "json" - } - } - }, - "url": { - "raw": "https://backend.betterzon.xyz/users/login", - "protocol": "https", - "host": [ - "backend", - "betterzon", - "xyz" - ], - "path": [ - "users", - "login" - ] - } - }, - "response": [] - }, - { - "name": "POST user login negative", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "pm.test(\"Verify status code\", function() {\r", - " pm.response.to.have.status(401);\r", - "});\r", - "\r", - "pm.test(\"Verify body to be json\", function() {\r", - " pm.response.to.be.json;\r", - "});" - ], - "type": "text/javascript" - } - }, - { - "listen": "prerequest", - "script": { - "exec": [ - "" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "POST", - "header": [], - "body": { - "mode": "raw", - "raw": "{\r\n \"username\": \"{{testuser_username}}\",\r\n \"password\": \"not_the_correct_password\"\r\n}", - "options": { - "raw": { - "language": "json" - } - } - }, - "url": { - "raw": "https://backend.betterzon.xyz/users/login", - "protocol": "https", - "host": [ - "backend", - "betterzon", - "xyz" - ], - "path": [ - "users", - "login" - ] - } - }, - "response": [] - } - ] - }, - { - "name": "Vendors", - "item": [ - { - "name": "GET all vendors", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "pm.test(\"Verify status code\", function() {\r", - " pm.response.to.have.status(200);\r", - "});\r", - "\r", - "pm.test(\"Verify body to be json\", function() {\r", - " pm.response.to.be.json;\r", - "});" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "https://backend.betterzon.xyz/vendors", - "protocol": "https", - "host": [ - "backend", - "betterzon", - "xyz" - ], - "path": [ - "vendors" - ] - } - }, - "response": [] - }, - { - "name": "GET single vendor", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "pm.test(\"Verify status code\", function() {\r", - " pm.response.to.have.status(200);\r", - "});\r", - "\r", - "pm.test(\"Verify body to be json\", function() {\r", - " pm.response.to.be.json;\r", - "});" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "https://backend.betterzon.xyz/vendors/1", - "protocol": "https", - "host": [ - "backend", - "betterzon", - "xyz" - ], - "path": [ - "vendors", - "1" - ] - } - }, - "response": [] - }, - { - "name": "GET vendors by query", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "pm.test(\"Verify status code\", function() {\r", - " pm.response.to.have.status(200);\r", - "});\r", - "\r", - "pm.test(\"Verify body to be json\", function() {\r", - " pm.response.to.be.json;\r", - "});" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "https://backend.betterzon.xyz/vendors/search/Apple", - "protocol": "https", - "host": [ - "backend", - "betterzon", - "xyz" - ], - "path": [ - "vendors", - "search", - "Apple" - ] - } - }, - "response": [] - }, - { - "name": "GET managed vendors", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "pm.test(\"Verify status code\", function() {\r", - " pm.response.to.have.status(200);\r", - "});\r", - "\r", - "pm.test(\"Verify body to be json\", function() {\r", - " pm.response.to.be.json;\r", - "});" - ], - "type": "text/javascript" - } - }, - { - "listen": "prerequest", - "script": { - "exec": [ - "pm.sendRequest({\r", - " url: 'https://backend.betterzon.xyz/users/login',\r", - " method: 'POST',\r", - " header: 'content-type:application/json',\r", - " body: {\r", - " mode: 'raw',\r", - " raw: JSON.stringify({\r", - " username: pm.collectionVariables.get(\"testuser_username\"),\r", - " password: pm.collectionVariables.get(\"testuser_password\")\r", - " })\r", - " }\r", - "}, function (err, response) {\r", - " pm.expect(err).to.not.be.ok;\r", - "});" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "https://backend.betterzon.xyz/vendors/managed", - "protocol": "https", - "host": [ - "backend", - "betterzon", - "xyz" - ], - "path": [ - "vendors", - "managed" - ] - } - }, - "response": [] - } - ] - } - ], - "event": [ - { - "listen": "prerequest", - "script": { - "type": "text/javascript", - "exec": [ - "" - ] - } - }, - { - "listen": "test", - "script": { - "type": "text/javascript", - "exec": [ - "" - ] - } - } - ], - "variable": [ - { - "key": "testuser_username", - "value": "" - }, - { - "key": "testuser_password", - "value": "" - }, - { - "key": "created_favshop_id", - "value": "" - }, - { - "key": "rand_user_id", - "value": "" - } - ] + "info": { + "_postman_id": "76b7db80-557f-44a6-8b86-f393beed8f86", + "name": "Betterzon API Tests", + "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json" + }, + "item": [ + { + "name": "Categories", + "item": [ + { + "name": "GET all categories", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Verify status code\", function() {\r", + " pm.response.to.have.status(200);\r", + "});\r", + "\r", + "pm.test(\"Verify body to be json\", function() {\r", + " pm.response.to.be.json;\r", + "});" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "https://backend.betterzon.xyz/categories/", + "protocol": "https", + "host": [ + "backend", + "betterzon", + "xyz" + ], + "path": [ + "categories", + "" + ] + } + }, + "response": [] + }, + { + "name": "GET single category", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Verify status code\", function() {\r", + " pm.response.to.have.status(200);\r", + "});\r", + "\r", + "pm.test(\"Verify body to be json\", function() {\r", + " pm.response.to.be.json;\r", + "});" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "https://backend.betterzon.xyz/categories/1", + "protocol": "https", + "host": [ + "backend", + "betterzon", + "xyz" + ], + "path": [ + "categories", + "1" + ] + } + }, + "response": [] + }, + { + "name": "GET categories by query", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Verify status code\", function() {\r", + " pm.response.to.have.status(200);\r", + "});\r", + "\r", + "pm.test(\"Verify body to be json\", function() {\r", + " pm.response.to.be.json;\r", + "});" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "https://backend.betterzon.xyz/categories/search/Elektro", + "protocol": "https", + "host": [ + "backend", + "betterzon", + "xyz" + ], + "path": [ + "categories", + "search", + "Elektro" + ] + } + }, + "response": [] + } + ] + }, + { + "name": "Contact Persons", + "item": [ + { + "name": "GET all contact persons", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Verify status code\", function() {\r", + " pm.response.to.have.status(200);\r", + "});\r", + "\r", + "pm.test(\"Verify body to be json\", function() {\r", + " pm.response.to.be.json;\r", + "});" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "https://backend.betterzon.xyz/contactpersons", + "protocol": "https", + "host": [ + "backend", + "betterzon", + "xyz" + ], + "path": [ + "contactpersons" + ] + } + }, + "response": [] + }, + { + "name": "GET single contact person", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Verify status code\", function() {\r", + " pm.response.to.have.status(200);\r", + "});\r", + "\r", + "pm.test(\"Verify body to be json\", function() {\r", + " pm.response.to.be.json;\r", + "});" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "https://backend.betterzon.xyz/contactpersons/1", + "protocol": "https", + "host": [ + "backend", + "betterzon", + "xyz" + ], + "path": [ + "contactpersons", + "1" + ] + } + }, + "response": [] + }, + { + "name": "GET contact persons by vendor", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Verify status code\", function() {\r", + " pm.response.to.have.status(200);\r", + "});\r", + "\r", + "pm.test(\"Verify body to be json\", function() {\r", + " pm.response.to.be.json;\r", + "});" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "https://backend.betterzon.xyz/contactpersons/byvendor/1", + "protocol": "https", + "host": [ + "backend", + "betterzon", + "xyz" + ], + "path": [ + "contactpersons", + "byvendor", + "1" + ] + } + }, + "response": [] + }, + { + "name": "POST new contact person", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Verify status code\", function() {\r", + " pm.response.to.have.status(201);\r", + "});" + ], + "type": "text/javascript" + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "pm.sendRequest({\r", + " url: 'https://backend.betterzon.xyz/users/login',\r", + " method: 'POST',\r", + " header: 'content-type:application/json',\r", + " body: {\r", + " mode: 'raw',\r", + " raw: JSON.stringify({\r", + " username: pm.collectionVariables.get(\"testuser_username\"),\r", + " password: pm.collectionVariables.get(\"testuser_password\")\r", + " })\r", + " }\r", + "}, function (err, response) {\r", + " pm.expect(err).to.not.be.ok;\r", + " pm.collectionVariables.set(\"session_id\", response.json().session_id);\r", + " pm.collectionVariables.set(\"session_key\", response.json().session_key);\r", + "});" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"session_id\": \"{{session_id}}\",\r\n \"session_key\": \"{{session_key}}\",\r\n \"vendor_id\": 7,\r\n \"first_name\": \"Test\",\r\n \"last_name\": \"Contact\",\r\n \"gender\": \"Unix\",\r\n \"email\": \"testcontact@betterzon.xyz\",\r\n \"phone\": \"+49 123 456789\"\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "https://backend.betterzon.xyz/contactpersons/", + "protocol": "https", + "host": [ + "backend", + "betterzon", + "xyz" + ], + "path": [ + "contactpersons", + "" + ] + } + }, + "response": [] + }, + { + "name": "PUT update contact person", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Verify status code\", function() {\r", + " pm.response.to.have.status(200);\r", + "});" + ], + "type": "text/javascript" + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "pm.sendRequest({\r", + " url: 'https://backend.betterzon.xyz/users/login',\r", + " method: 'POST',\r", + " header: 'content-type:application/json',\r", + " body: {\r", + " mode: 'raw',\r", + " raw: JSON.stringify({\r", + " username: pm.collectionVariables.get(\"testuser_username\"),\r", + " password: pm.collectionVariables.get(\"testuser_password\")\r", + " })\r", + " }\r", + "}, function (err, response) {\r", + " pm.expect(err).to.not.be.ok;\r", + " pm.collectionVariables.set(\"session_id\", response.json().session_id);\r", + " pm.collectionVariables.set(\"session_key\", response.json().session_key);\r", + "});" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "PUT", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"session_id\": \"{{session_id}}\",\r\n \"session_key\": \"{{session_key}}\",\r\n \"vendor_id\": 7,\r\n \"first_name\": \"Test\",\r\n \"last_name\": \"Contact\",\r\n \"gender\": \"Unix\",\r\n \"email\": \"testcontact@betterzon.xyz\",\r\n \"phone\": \"+49 123 456789\"\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "https://backend.betterzon.xyz/contactpersons/2", + "protocol": "https", + "host": [ + "backend", + "betterzon", + "xyz" + ], + "path": [ + "contactpersons", + "2" + ] + } + }, + "response": [] + } + ] + }, + { + "name": "Crawling Status", + "item": [ + { + "name": "GET crawling status", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Verify status code\", function() {\r", + " pm.response.to.have.status(200);\r", + "});\r", + "\r", + "pm.test(\"Verify body to be json\", function() {\r", + " pm.response.to.be.json;\r", + "});" + ], + "type": "text/javascript" + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "pm.sendRequest({\r", + " url: 'https://backend.betterzon.xyz/users/login',\r", + " method: 'POST',\r", + " header: 'content-type:application/json',\r", + " body: {\r", + " mode: 'raw',\r", + " raw: JSON.stringify({\r", + " username: pm.collectionVariables.get(\"testuser_username\"),\r", + " password: pm.collectionVariables.get(\"testuser_password\")\r", + " })\r", + " }\r", + "}, function (err, response) {\r", + " pm.expect(err).to.not.be.ok;\r", + " pm.collectionVariables.set(\"session_id\", response.json().session_id);\r", + " pm.collectionVariables.set(\"session_key\", response.json().session_key);\r", + "});\r", + "" + ], + "type": "text/javascript" + } + } + ], + "protocolProfileBehavior": { + "disableBodyPruning": true + }, + "request": { + "method": "GET", + "header": [], + "body": { + "mode": "raw", + "raw": "", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "https://backend.betterzon.xyz/crawlingstatus?session_id={{session_id}}&session_key={{session_key}}", + "protocol": "https", + "host": [ + "backend", + "betterzon", + "xyz" + ], + "path": [ + "crawlingstatus" + ], + "query": [ + { + "key": "session_id", + "value": "{{session_id}}" + }, + { + "key": "session_key", + "value": "{{session_key}}" + } + ] + } + }, + "response": [] + } + ] + }, + { + "name": "Favorite Shops", + "item": [ + { + "name": "GET favorite shops", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Verify status code\", function() {\r", + " pm.response.to.have.status(200);\r", + "});\r", + "\r", + "pm.test(\"Verify body to be json\", function() {\r", + " pm.response.to.be.json;\r", + "});" + ], + "type": "text/javascript" + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "pm.sendRequest({\r", + " url: 'https://backend.betterzon.xyz/users/login',\r", + " method: 'POST',\r", + " header: 'content-type:application/json',\r", + " body: {\r", + " mode: 'raw',\r", + " raw: JSON.stringify({\r", + " username: pm.collectionVariables.get(\"testuser_username\"),\r", + " password: pm.collectionVariables.get(\"testuser_password\")\r", + " })\r", + " }\r", + "}, function (err, response) {\r", + " pm.expect(err).to.not.be.ok;\r", + "});\r", + "" + ], + "type": "text/javascript" + } + } + ], + "protocolProfileBehavior": { + "disableBodyPruning": true + }, + "request": { + "method": "GET", + "header": [], + "body": { + "mode": "raw", + "raw": "", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "https://backend.betterzon.xyz/favoriteshops", + "protocol": "https", + "host": [ + "backend", + "betterzon", + "xyz" + ], + "path": [ + "favoriteshops" + ] + } + }, + "response": [] + }, + { + "name": "POST create favorite shop entry", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Verify status code\", function() {\r", + " pm.response.to.have.status(201);\r", + "});\r", + "\r", + "pm.test(\"Verify body to be json\", function() {\r", + " pm.response.to.be.json;\r", + "});" + ], + "type": "text/javascript" + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "pm.sendRequest({\r", + " url: 'https://backend.betterzon.xyz/users/login',\r", + " method: 'POST',\r", + " header: 'content-type:application/json',\r", + " body: {\r", + " mode: 'raw',\r", + " raw: JSON.stringify({\r", + " username: pm.collectionVariables.get(\"testuser_username\"),\r", + " password: pm.collectionVariables.get(\"testuser_password\")\r", + " })\r", + " }\r", + "}, function (err, response) {\r", + " pm.expect(err).to.not.be.ok;\r", + " pm.collectionVariables.set(\"session_id\", response.json().session_id);\r", + " pm.collectionVariables.set(\"session_key\", response.json().session_key);\r", + "});\r", + "" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"session_id\": \"{{session_id}}\",\r\n \"session_key\": \"{{session_key}}\",\r\n \"vendor_id\": 7\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "https://backend.betterzon.xyz/favoriteshops", + "protocol": "https", + "host": [ + "backend", + "betterzon", + "xyz" + ], + "path": [ + "favoriteshops" + ] + } + }, + "response": [] + }, + { + "name": "DELETE favorite shop entry", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Verify status code\", function() {\r", + " pm.response.to.have.status(201);\r", + "});\r", + "\r", + "pm.test(\"Verify body to be json\", function() {\r", + " pm.response.to.be.json;\r", + "});" + ], + "type": "text/javascript" + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "pm.sendRequest({\r", + " url: 'https://backend.betterzon.xyz/users/login',\r", + " method: 'POST',\r", + " header: 'content-type:application/json',\r", + " body: {\r", + " mode: 'raw',\r", + " raw: JSON.stringify({\r", + " username: pm.collectionVariables.get(\"testuser_username\"),\r", + " password: pm.collectionVariables.get(\"testuser_password\")\r", + " })\r", + " }\r", + "}, function (err, response) {\r", + " pm.expect(err).to.not.be.ok;\r", + " pm.collectionVariables.set(\"session_id\", response.json().session_id);\r", + " pm.collectionVariables.set(\"session_key\", response.json().session_key);\r", + " getNewFavId();\r", + "});\r", + "\r", + "\r", + "let getNewFavId = function() {\r", + " // Create a new shops entry so we can delete it afterwards\r", + " pm.sendRequest({\r", + " url: 'https://backend.betterzon.xyz/favoriteshops',\r", + " method: 'POST',\r", + " header: 'content-type:application/json',\r", + " body: {\r", + " mode: 'raw',\r", + " raw: JSON.stringify({\r", + " session_id: pm.collectionVariables.get(\"session_id\"),\r", + " session_key: pm.collectionVariables.get(\"session_key\"),\r", + " vendor_id: 7\r", + " })\r", + " }\r", + " }, function (err, response) {\r", + " pm.expect(err).to.not.be.ok;\r", + " });\r", + "\r", + " // Get the id of the entry\r", + " pm.sendRequest({\r", + " url: ('https://backend.betterzon.xyz/favoriteshops?session_id=' + pm.collectionVariables.get(\"session_id\") + '&session_key=' + pm.collectionVariables.get(\"session_key\")),\r", + " method: 'GET'\r", + " }, function (err, response) {\r", + " pm.expect(err).to.not.be.ok;\r", + " pm.collectionVariables.set(\"created_favshop_id\", response.json()[0].favorite_id);\r", + " });\r", + "}" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "DELETE", + "header": [], + "body": { + "mode": "raw", + "raw": "", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "https://backend.betterzon.xyz/favoriteshops/{{created_favshop_id}}", + "protocol": "https", + "host": [ + "backend", + "betterzon", + "xyz" + ], + "path": [ + "favoriteshops", + "{{created_favshop_id}}" + ] + } + }, + "response": [] + } + ] + }, + { + "name": "Manufacturers", + "item": [ + { + "name": "GET all manufacturers", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Verify status code\", function() {\r", + " pm.response.to.have.status(200);\r", + "});\r", + "\r", + "pm.test(\"Verify body to be json\", function() {\r", + " pm.response.to.be.json;\r", + "});" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "https://backend.betterzon.xyz/manufacturers", + "protocol": "https", + "host": [ + "backend", + "betterzon", + "xyz" + ], + "path": [ + "manufacturers" + ] + } + }, + "response": [] + }, + { + "name": "GET single manufacturer", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Verify status code\", function() {\r", + " pm.response.to.have.status(200);\r", + "});\r", + "\r", + "pm.test(\"Verify body to be json\", function() {\r", + " pm.response.to.be.json;\r", + "});" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "https://backend.betterzon.xyz/manufacturers/1", + "protocol": "https", + "host": [ + "backend", + "betterzon", + "xyz" + ], + "path": [ + "manufacturers", + "1" + ] + } + }, + "response": [] + }, + { + "name": "GET manufacturers by query", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Verify status code\", function() {\r", + " pm.response.to.have.status(200);\r", + "});\r", + "\r", + "pm.test(\"Verify body to be json\", function() {\r", + " pm.response.to.be.json;\r", + "});" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "https://backend.betterzon.xyz/manufacturers/search/Apple", + "protocol": "https", + "host": [ + "backend", + "betterzon", + "xyz" + ], + "path": [ + "manufacturers", + "search", + "Apple" + ] + } + }, + "response": [] + } + ] + }, + { + "name": "Price Alarms", + "item": [ + { + "name": "GET all price alarms", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Verify status code\", function() {\r", + " pm.response.to.have.status(200);\r", + "});\r", + "\r", + "pm.test(\"Verify body to be json\", function() {\r", + " pm.response.to.be.json;\r", + "});" + ], + "type": "text/javascript" + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "pm.sendRequest({\r", + " url: 'https://backend.betterzon.xyz/users/login',\r", + " method: 'POST',\r", + " header: 'content-type:application/json',\r", + " body: {\r", + " mode: 'raw',\r", + " raw: JSON.stringify({\r", + " username: pm.collectionVariables.get(\"testuser_username\"),\r", + " password: pm.collectionVariables.get(\"testuser_password\")\r", + " })\r", + " }\r", + "}, function (err, response) {\r", + " pm.expect(err).to.not.be.ok;\r", + " pm.collectionVariables.set(\"session_id\", response.json().session_id);\r", + " pm.collectionVariables.set(\"session_key\", response.json().session_key);\r", + "});" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "https://backend.betterzon.xyz/pricealarms?session_id={{session_id}}&session_key={{session_key}}", + "protocol": "https", + "host": [ + "backend", + "betterzon", + "xyz" + ], + "path": [ + "pricealarms" + ], + "query": [ + { + "key": "session_id", + "value": "{{session_id}}" + }, + { + "key": "session_key", + "value": "{{session_key}}" + } + ] + } + }, + "response": [] + }, + { + "name": "POST new price alarm", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Verify status code\", function() {\r", + " pm.response.to.have.status(201);\r", + "});\r", + "\r", + "pm.test(\"Verify body to be json\", function() {\r", + " pm.response.to.be.json;\r", + "});" + ], + "type": "text/javascript" + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "pm.sendRequest({\r", + " url: 'https://backend.betterzon.xyz/users/login',\r", + " method: 'POST',\r", + " header: 'content-type:application/json',\r", + " body: {\r", + " mode: 'raw',\r", + " raw: JSON.stringify({\r", + " username: pm.collectionVariables.get(\"testuser_username\"),\r", + " password: pm.collectionVariables.get(\"testuser_password\")\r", + " })\r", + " }\r", + "}, function (err, response) {\r", + " pm.expect(err).to.not.be.ok;\r", + " pm.collectionVariables.set(\"session_id\", response.json().session_id);\r", + " pm.collectionVariables.set(\"session_key\", response.json().session_key);\r", + "});" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"session_id\": \"{{session_id}}\",\r\n \"session_key\": \"{{session_key}}\",\r\n \"product_id\": 1,\r\n \"defined_price\": 23400\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "https://backend.betterzon.xyz/pricealarms", + "protocol": "https", + "host": [ + "backend", + "betterzon", + "xyz" + ], + "path": [ + "pricealarms" + ] + } + }, + "response": [] + }, + { + "name": "PUT update price alarm", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Verify status code\", function() {\r", + " pm.response.to.have.status(200);\r", + "});\r", + "\r", + "pm.test(\"Verify body to be json\", function() {\r", + " pm.response.to.be.json;\r", + "});" + ], + "type": "text/javascript" + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "pm.sendRequest({\r", + " url: 'https://backend.betterzon.xyz/users/login',\r", + " method: 'POST',\r", + " header: 'content-type:application/json',\r", + " body: {\r", + " mode: 'raw',\r", + " raw: JSON.stringify({\r", + " username: pm.collectionVariables.get(\"testuser_username\"),\r", + " password: pm.collectionVariables.get(\"testuser_password\")\r", + " })\r", + " }\r", + "}, function (err, response) {\r", + " pm.expect(err).to.not.be.ok;\r", + " pm.collectionVariables.set(\"session_id\", response.json().session_id);\r", + " pm.collectionVariables.set(\"session_key\", response.json().session_key);\r", + "});" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "PUT", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"session_id\": \"{{session_id}}\",\r\n \"session_key\": \"{{session_key}}\",\r\n \"alarm_id\": 12,\r\n \"defined_price\": 23400\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "https://backend.betterzon.xyz/pricealarms", + "protocol": "https", + "host": [ + "backend", + "betterzon", + "xyz" + ], + "path": [ + "pricealarms" + ] + } + }, + "response": [] + } + ] + }, + { + "name": "Prices", + "item": [ + { + "name": "GET all prices", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Verify status code\", function() {\r", + " pm.response.to.have.status(200);\r", + "});\r", + "\r", + "pm.test(\"Verify body to be json\", function() {\r", + " pm.response.to.be.json;\r", + "});" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "https://backend.betterzon.xyz/prices/", + "protocol": "https", + "host": [ + "backend", + "betterzon", + "xyz" + ], + "path": [ + "prices", + "" + ] + } + }, + "response": [] + }, + { + "name": "GET single price", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Verify status code\", function() {\r", + " pm.response.to.have.status(200);\r", + "});\r", + "\r", + "pm.test(\"Verify body to be json\", function() {\r", + " pm.response.to.be.json;\r", + "});" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "https://backend.betterzon.xyz/prices/", + "protocol": "https", + "host": [ + "backend", + "betterzon", + "xyz" + ], + "path": [ + "prices", + "" + ] + } + }, + "response": [] + }, + { + "name": "GET best deals", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Verify status code\", function() {\r", + " pm.response.to.have.status(200);\r", + "});\r", + "\r", + "pm.test(\"Verify body to be json\", function() {\r", + " pm.response.to.be.json;\r", + "});" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "https://backend.betterzon.xyz/prices/bestDeals/10", + "protocol": "https", + "host": [ + "backend", + "betterzon", + "xyz" + ], + "path": [ + "prices", + "bestDeals", + "10" + ] + } + }, + "response": [] + }, + { + "name": "GET prices by list of products", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Verify status code\", function() {\r", + " pm.response.to.have.status(200);\r", + "});\r", + "\r", + "pm.test(\"Verify body to be json\", function() {\r", + " pm.response.to.be.json;\r", + "});" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "https://backend.betterzon.xyz/prices/byProduct/list/[1,2,3]", + "protocol": "https", + "host": [ + "backend", + "betterzon", + "xyz" + ], + "path": [ + "prices", + "byProduct", + "list", + "[1,2,3]" + ] + } + }, + "response": [] + }, + { + "name": "POST new price", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Verify status code\", function() {\r", + " pm.response.to.have.status(201);\r", + "});" + ], + "type": "text/javascript" + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "pm.sendRequest({\r", + " url: 'https://backend.betterzon.xyz/users/login',\r", + " method: 'POST',\r", + " header: 'content-type:application/json',\r", + " body: {\r", + " mode: 'raw',\r", + " raw: JSON.stringify({\r", + " username: pm.collectionVariables.get(\"testuser_username\"),\r", + " password: pm.collectionVariables.get(\"testuser_password\")\r", + " })\r", + " }\r", + "}, function (err, response) {\r", + " pm.expect(err).to.not.be.ok;\r", + " pm.collectionVariables.set(\"session_id\", response.json().session_id);\r", + " pm.collectionVariables.set(\"session_key\", response.json().session_key);\r", + "});" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"session_id\": \"{{session_id}}\",\r\n \"session_key\": \"{{session_key}}\",\r\n \"vendor_id\": 7,\r\n \"product_id\": 1,\r\n \"price_in_cents\": 123456\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "https://backend.betterzon.xyz/prices", + "protocol": "https", + "host": [ + "backend", + "betterzon", + "xyz" + ], + "path": [ + "prices" + ] + } + }, + "response": [] + } + ] + }, + { + "name": "Products", + "item": [ + { + "name": "GET all products", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Verify status code\", function() {\r", + " pm.response.to.have.status(200);\r", + "});\r", + "\r", + "pm.test(\"Verify body to be json\", function() {\r", + " pm.response.to.be.json;\r", + "})" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "https://backend.betterzon.xyz/products/", + "protocol": "https", + "host": [ + "backend", + "betterzon", + "xyz" + ], + "path": [ + "products", + "" + ] + } + }, + "response": [] + }, + { + "name": "GET single product", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Verify status code\", function() {\r", + " pm.response.to.have.status(200);\r", + "});\r", + "\r", + "pm.test(\"Verify body to be json\", function() {\r", + " pm.response.to.be.json;\r", + "})" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "https://backend.betterzon.xyz/products/1", + "protocol": "https", + "host": [ + "backend", + "betterzon", + "xyz" + ], + "path": [ + "products", + "1" + ] + } + }, + "response": [] + }, + { + "name": "GET products by query", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Verify status code\", function() {\r", + " pm.response.to.have.status(200);\r", + "});\r", + "\r", + "pm.test(\"Verify body to be json\", function() {\r", + " pm.response.to.be.json;\r", + "})" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "https://backend.betterzon.xyz/products/search/iPhone", + "protocol": "https", + "host": [ + "backend", + "betterzon", + "xyz" + ], + "path": [ + "products", + "search", + "iPhone" + ] + } + }, + "response": [] + }, + { + "name": "GET products by list of ids", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Verify status code\", function() {\r", + " pm.response.to.have.status(200);\r", + "});\r", + "\r", + "pm.test(\"Verify body to be json\", function() {\r", + " pm.response.to.be.json;\r", + "})" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "https://backend.betterzon.xyz/products/list/[1,2,3]", + "protocol": "https", + "host": [ + "backend", + "betterzon", + "xyz" + ], + "path": [ + "products", + "list", + "[1,2,3]" + ] + } + }, + "response": [] + }, + { + "name": "GET products by vendor", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Verify status code\", function() {\r", + " pm.response.to.have.status(200);\r", + "});\r", + "\r", + "pm.test(\"Verify body to be json\", function() {\r", + " pm.response.to.be.json;\r", + "})" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "https://backend.betterzon.xyz/products/vendor/1", + "protocol": "https", + "host": [ + "backend", + "betterzon", + "xyz" + ], + "path": [ + "products", + "vendor", + "1" + ] + } + }, + "response": [] + }, + { + "name": "POST new product", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Verify status code\", function() {\r", + " pm.response.to.have.status(201);\r", + "});" + ], + "type": "text/javascript" + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"asin\": \"B07X356256\"\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "https://backend.betterzon.xyz/products", + "protocol": "https", + "host": [ + "backend", + "betterzon", + "xyz" + ], + "path": [ + "products" + ] + } + }, + "response": [] + } + ] + }, + { + "name": "Users", + "item": [ + { + "name": "POST user registration negative", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Verify status code\", function() {\r", + " pm.response.to.have.status(400);\r", + "});\r", + "\r", + "pm.test(\"Verify body to be json\", function() {\r", + " pm.response.to.be.json;\r", + "});" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"username\": \"Testuser\",\r\n \"password\": \"never_gonna_give_you_up\",\r\n \"email\": \"Wrongemail\"\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "https://backend.betterzon.xyz/users/register", + "protocol": "https", + "host": [ + "backend", + "betterzon", + "xyz" + ], + "path": [ + "users", + "register" + ] + } + }, + "response": [] + }, + { + "name": "POST user registration positive", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Verify status code\", function() {\r", + " pm.response.to.have.status(201);\r", + "});" + ], + "type": "text/javascript" + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "const customerId = Math.floor((Math.random()*10000 +1));\r", + "pm.collectionVariables.set(\"rand_user_id\", customerId);" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"username\": \"testuser_{{rand_user_id}}\",\r\n \"password\": \"supersecurepassword1234!\",\r\n \"email\": \"testuser_{{rand_user_id}}@betterzon.xyz\"\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "https://backend.betterzon.xyz/users/register", + "protocol": "https", + "host": [ + "backend", + "betterzon", + "xyz" + ], + "path": [ + "users", + "register" + ] + } + }, + "response": [] + }, + { + "name": "POST user login positive", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Verify status code\", function() {\r", + " pm.response.to.have.status(200);\r", + "});" + ], + "type": "text/javascript" + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"username\": \"{{testuser_username}}\",\r\n \"password\": \"{{testuser_password}}\"\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "https://backend.betterzon.xyz/users/login", + "protocol": "https", + "host": [ + "backend", + "betterzon", + "xyz" + ], + "path": [ + "users", + "login" + ] + } + }, + "response": [] + }, + { + "name": "POST user login negative", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Verify status code\", function() {\r", + " pm.response.to.have.status(401);\r", + "});\r", + "\r", + "pm.test(\"Verify body to be json\", function() {\r", + " pm.response.to.be.json;\r", + "});" + ], + "type": "text/javascript" + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"username\": \"{{testuser_username}}\",\r\n \"password\": \"not_the_correct_password\"\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "https://backend.betterzon.xyz/users/login", + "protocol": "https", + "host": [ + "backend", + "betterzon", + "xyz" + ], + "path": [ + "users", + "login" + ] + } + }, + "response": [] + } + ] + }, + { + "name": "Vendors", + "item": [ + { + "name": "GET all vendors", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Verify status code\", function() {\r", + " pm.response.to.have.status(200);\r", + "});\r", + "\r", + "pm.test(\"Verify body to be json\", function() {\r", + " pm.response.to.be.json;\r", + "});" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "https://backend.betterzon.xyz/vendors", + "protocol": "https", + "host": [ + "backend", + "betterzon", + "xyz" + ], + "path": [ + "vendors" + ] + } + }, + "response": [] + }, + { + "name": "GET single vendor", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Verify status code\", function() {\r", + " pm.response.to.have.status(200);\r", + "});\r", + "\r", + "pm.test(\"Verify body to be json\", function() {\r", + " pm.response.to.be.json;\r", + "});" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "https://backend.betterzon.xyz/vendors/1", + "protocol": "https", + "host": [ + "backend", + "betterzon", + "xyz" + ], + "path": [ + "vendors", + "1" + ] + } + }, + "response": [] + }, + { + "name": "GET vendors by query", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Verify status code\", function() {\r", + " pm.response.to.have.status(200);\r", + "});\r", + "\r", + "pm.test(\"Verify body to be json\", function() {\r", + " pm.response.to.be.json;\r", + "});" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "https://backend.betterzon.xyz/vendors/search/Apple", + "protocol": "https", + "host": [ + "backend", + "betterzon", + "xyz" + ], + "path": [ + "vendors", + "search", + "Apple" + ] + } + }, + "response": [] + }, + { + "name": "GET managed vendors", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Verify status code\", function() {\r", + " pm.response.to.have.status(200);\r", + "});\r", + "\r", + "pm.test(\"Verify body to be json\", function() {\r", + " pm.response.to.be.json;\r", + "});" + ], + "type": "text/javascript" + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "pm.sendRequest({\r", + " url: 'https://backend.betterzon.xyz/users/login',\r", + " method: 'POST',\r", + " header: 'content-type:application/json',\r", + " body: {\r", + " mode: 'raw',\r", + " raw: JSON.stringify({\r", + " username: pm.collectionVariables.get(\"testuser_username\"),\r", + " password: pm.collectionVariables.get(\"testuser_password\")\r", + " })\r", + " }\r", + "}, function (err, response) {\r", + " pm.expect(err).to.not.be.ok;\r", + " pm.collectionVariables.set(\"session_id\", response.json().session_id);\r", + " pm.collectionVariables.set(\"session_key\", response.json().session_key);\r", + "});" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "https://backend.betterzon.xyz/vendors/managed?session_id={{session_id}}&session_key={{session_key}}", + "protocol": "https", + "host": [ + "backend", + "betterzon", + "xyz" + ], + "path": [ + "vendors", + "managed" + ], + "query": [ + { + "key": "session_id", + "value": "{{session_id}}" + }, + { + "key": "session_key", + "value": "{{session_key}}" + } + ] + } + }, + "response": [] + } + ] + } + ], + "event": [ + { + "listen": "prerequest", + "script": { + "type": "text/javascript", + "exec": [ + "" + ] + } + }, + { + "listen": "test", + "script": { + "type": "text/javascript", + "exec": [ + "" + ] + } + } + ], + "variable": [ + { + "key": "testuser_username", + "value": "" + }, + { + "key": "testuser_password", + "value": "" + }, + { + "key": "created_favshop_id", + "value": "" + }, + { + "key": "rand_user_id", + "value": "" + }, + { + "key": "session_id", + "value": "" + }, + { + "key": "session_key", + "value": "" + } + ] } \ No newline at end of file From c90949de47d719865ccc2a8ca1456573642fd20d Mon Sep 17 00:00:00 2001 From: Nico <64784007+Unk3wn@users.noreply.github.com> Date: Wed, 16 Jun 2021 00:10:17 +0200 Subject: [PATCH 6/8] :ambulance: Fixed Copyright for you :) (#91) --- Frontend/src/app/components/copyright/copyright.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Frontend/src/app/components/copyright/copyright.component.html b/Frontend/src/app/components/copyright/copyright.component.html index 8a212d1..a9545ed 100644 --- a/Frontend/src/app/components/copyright/copyright.component.html +++ b/Frontend/src/app/components/copyright/copyright.component.html @@ -1,3 +1,3 @@ From 841502f9d1dbdd2ae395659db06c0b093e705e15 Mon Sep 17 00:00:00 2001 From: Patrick <50352812+Mueller-Patrick@users.noreply.github.com> Date: Wed, 16 Jun 2021 09:20:40 +0200 Subject: [PATCH 7/8] BETTERZON-150: Fixing best deals API endpoint logic (#92) --- Backend/src/models/prices/prices.service.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Backend/src/models/prices/prices.service.ts b/Backend/src/models/prices/prices.service.ts index 3175b66..034131a 100644 --- a/Backend/src/models/prices/prices.service.ts +++ b/Backend/src/models/prices/prices.service.ts @@ -282,11 +282,11 @@ export const getBestDeals = async (amount: number): Promise => { 'price_in_cents': lowestPrice.price_in_cents, 'timestamp': lowestPrice.timestamp, 'amazonDifference': (amazonPrice.price_in_cents - lowestPrice.price_in_cents), - 'amazonDifferencePercent': ((1 - (lowestPrice.price_in_cents / amazonPrice.price_in_cents)) * 100), + 'amazonDifferencePercent': ((amazonPrice.price_in_cents / lowestPrice.price_in_cents) * 100), }; // Push only deals were the amazon price is actually higher - if (deal.amazonDifferencePercent > 0) { + if (deal.amazonDifferencePercent > 0 && deal.amazonDifference > 0) { deals.push(deal as Deal); } } From 45acbfd9a2948a0d10228cf0d4e1c3579cb41a48 Mon Sep 17 00:00:00 2001 From: Patrick <50352812+Mueller-Patrick@users.noreply.github.com> Date: Thu, 17 Jun 2021 17:15:06 +0200 Subject: [PATCH 8/8] BETTERZON-151: Adding option to delete price alarm (#94) --- .../models/pricealarms/pricealarms.router.ts | 26 +++++++++++++++++++ .../models/pricealarms/pricealarms.service.ts | 21 +++++++++++++++ .../src/test/java/stepdefs/SearchProduct.java | 4 +-- Frontend/src/app/services/api.service.ts | 19 ++++++++++++++ 4 files changed, 68 insertions(+), 2 deletions(-) diff --git a/Backend/src/models/pricealarms/pricealarms.router.ts b/Backend/src/models/pricealarms/pricealarms.router.ts index 6a73bca..8e0114a 100644 --- a/Backend/src/models/pricealarms/pricealarms.router.ts +++ b/Backend/src/models/pricealarms/pricealarms.router.ts @@ -106,3 +106,29 @@ pricealarmsRouter.put('/', async (req: Request, res: Response) => { res.status(500).send(JSON.stringify({'message': 'Internal Server Error. Try again later.'})); } }); + +// DELETE pricealarms/:id +pricealarmsRouter.delete('/:id', async (req, res) => { + try { + // Authenticate user + const user_ip = req.connection.remoteAddress ?? ''; + const session_id = (req.query.session_id ?? '').toString(); + const session_key = (req.query.session_key ?? '').toString(); + const user = await UserService.checkSession(session_id, session_key, user_ip); + + const id: number = parseInt(req.params.id, 10); + + const success = await PriceAlarmsService.deletePriceAlarm(id, user.user_id); + + if (success) { + res.status(200).send(JSON.stringify({success: true})); + return; + } else { + res.status(500).send(JSON.stringify({success: false})); + return; + } + } catch (e) { + console.log('Error handling a request: ' + e.message); + res.status(500).send(JSON.stringify({'message': 'Internal Server Error. Try again later.'})); + } +}); diff --git a/Backend/src/models/pricealarms/pricealarms.service.ts b/Backend/src/models/pricealarms/pricealarms.service.ts index 7d975fb..6b59146 100644 --- a/Backend/src/models/pricealarms/pricealarms.service.ts +++ b/Backend/src/models/pricealarms/pricealarms.service.ts @@ -92,3 +92,24 @@ export const updatePriceAlarm = async (alarm_id: number, user_id: number, define } } }; + +/** + * Deletes the given price alarm + * @param alarm_id The id of the price alarm to update + * @param user_id The id of the user that wants to update the price alarm + */ +export const deletePriceAlarm = async (alarm_id: number, user_id: number): Promise => { + let conn; + try { + conn = await pool.getConnection(); + const res = await conn.query('DELETE FROM price_alarms WHERE alarm_id = ? AND user_id = ?', [alarm_id, user_id]); + + return res.affectedRows === 1; + } catch (err) { + throw err; + } finally { + if (conn) { + conn.end(); + } + } +}; diff --git a/CucumberTests/src/test/java/stepdefs/SearchProduct.java b/CucumberTests/src/test/java/stepdefs/SearchProduct.java index af32faa..73ab146 100644 --- a/CucumberTests/src/test/java/stepdefs/SearchProduct.java +++ b/CucumberTests/src/test/java/stepdefs/SearchProduct.java @@ -16,7 +16,7 @@ public class SearchProduct { //throw new PendingException(); Preconditions.driver.get("https://betterzon.xyz"); WebElement logo = (new WebDriverWait(Preconditions.driver, 10)) - .until(ExpectedConditions.elementToBeClickable(By.cssSelector(".logo"))); + .until(ExpectedConditions.elementToBeClickable(By.cssSelector(".navbar-brand"))); } @When("^the user enters the search term \"([^\"]*)\" and clicks search$") @@ -25,7 +25,7 @@ public class SearchProduct { searchField.sendKeys(searchTerm); searchField.sendKeys(Keys.ENTER); WebElement logo = (new WebDriverWait(Preconditions.driver, 10)) - .until(ExpectedConditions.elementToBeClickable(By.cssSelector(".logo"))); + .until(ExpectedConditions.elementToBeClickable(By.cssSelector(".navbar-brand"))); } @Then("^the user should see the error page \"([^\"]*)\"$") diff --git a/Frontend/src/app/services/api.service.ts b/Frontend/src/app/services/api.service.ts index 953c229..4839482 100644 --- a/Frontend/src/app/services/api.service.ts +++ b/Frontend/src/app/services/api.service.ts @@ -445,6 +445,25 @@ export class ApiService { } } + /** + * Deletes the given price alarm + * @param alarmId the price alarm to delete + * @return Observable The observable response of the api + */ + deletePriceAlarm(alarmId: number): Observable { + try { + const sessionInfo = this.getSessionInfoFromLocalStorage(); + + let params = new HttpParams(); + params = params.append('session_id', sessionInfo.session_id); + params = params.append('session_key', sessionInfo.session_key); + + return this.http.delete((this.apiUrl + '/pricealarms/' + alarmId), {params}); + } catch (exception) { + process.stderr.write(`ERROR received from ${this.apiUrl}: ${exception}\n`); + } + } + /* __ __ / / / /_______ __________