From f46be2fbcd51b51b946bdddc2fc86fa3a580dae4 Mon Sep 17 00:00:00 2001 From: julaakko Date: Fri, 9 Sep 2016 16:51:14 +0300 Subject: [PATCH 1/2] Project finished --- bin/.gitignore | 1 + bin/fi/oulu/tol/sqat/GildedRose.class | Bin 2380 -> 2131 bytes bin/fi/oulu/tol/sqat/Item.class | Bin 1034 -> 1034 bytes .../oulu/tol/sqat/tests/GildedRoseTest.class | Bin 504 -> 4445 bytes .../oulu/tol/sqat/tests/GildedRoseTest.java | 156 +++++++++++++++++- 5 files changed, 153 insertions(+), 4 deletions(-) create mode 100644 bin/.gitignore diff --git a/bin/.gitignore b/bin/.gitignore new file mode 100644 index 0000000..76b3e7b --- /dev/null +++ b/bin/.gitignore @@ -0,0 +1 @@ +/fi/ diff --git a/bin/fi/oulu/tol/sqat/GildedRose.class b/bin/fi/oulu/tol/sqat/GildedRose.class index f244eba73874c91f18244a292b7f88cc3b4b5f80..b904cd2a2f60ff47b023e9e0b84ddbe56eddc526 100644 GIT binary patch literal 2131 zcmbVMOK%%h6#nkmi60qa*C}amn|9Jbu$vHv7D7{p7RPxuu0!g`sD(vu?6Es#Vkh$e zr9wgic3q&h3q*w~5fUv69~hLv6^Zw z!ISZ;q=)9k*i~4gBU|X#spp`g$N?cH>hie zpEkfj$ytV0DJO$8k8k?$M$@>}d@?45I^F7)&2`g{vou&UyzrrE@v^FHa??~z#i}Y? zSxe0?r!r?J=GM|mp;{@Z25of==VT-?%@8CCtAwFh+s=?J`9aeb&Dna%Hn=&aEb>ZG zsg{(>oJQEFnj-lf87a(Avgu0pk`j60os}^spaTS*Q+0i*BCHEC7DY~ga%xr~=0zFH zBGzkaH%SJj(X&M3owH~&m-uFVeuKHHZ4}gbO-y*GF=gYTkr<)_;i1z@gv6}1L{Kl*T({M3E))4wR2CM=2GJ(N4Tha(c+YZMPUt}t;tLkNGv~>qNor&CX7jmx~-MQ{IyVn%b@>y%=bLssBSd`HAKzG2me}62FiN`sk zH|Y?7?u#x&=~6sK7tC>d00p057@uMUcM-!wx|jFqrg?&K{DBD;p__9Alk6Pbj#qJk zZ6U>OW0rk~dG;8K>{nc5zazu`L{^GoRT{*aw2Zuz#T98C?@OOyK)Q`<|D7I5`Vtvj iA|6?K`VshxZju9RAK=ab7A6mHYvPPJm@DL!@b16uzSTPb literal 2380 zcmbVNOK%fb6#nkm@r!{N=K&3cPD%qdq?kuT00*cO@-R3F!NF+)6mIMrGhyNhGvk(^ zN|oB~SX6qLxWS8s_~`Vk$TZGOB}Lr7-9rUq2(z}r-}St4#) zD#5xLKTnYk#S1={2w)e3e{^_oD4A*xLBqR#v@;NyMfCI7;eB7DQg_wR91{F`~NP&~NFMX3l8N zb)gNL#ezw)3*ZDpTc%{plq_y{YD2u3mp&IbNy{?r0D4GVy*zirc6dQ(^W3(DtvRN~ zwejS@xn%m-!T#|+EoT;U!g2y2QAPU9;w-5$uMP7e*ZTMk5h8JYs3IvPvbi*$=Z+XF zaf1jUEpV$ql4+_V1xZ4`iUAB#!v!IaJesOX-8Cf%NoY#NS)8N8B)<_pN1APpx?QX4 z3Sk(devH&=tE@Z~=Owc~ag$23WzGvKG8ktFQO?zRX=YN=m{l=>kH~1dj9#iQE3H#1 zF3Hd!g=U0dq>2)~qT*v26Qr05DqFm!f=geot>31)nNClNh{`y``!Jucj$0^WmaLo@ z(B(ijuFcZ{DG;<1#U8qBs31AS^!C%2f&jeq1PNu>L`Vm{-zGY%X7r#1W7NnDw&63nlNQm2Z|DM&990^=k6!eZ8zyO28up}#aAHfj z>q$IRzKnEHKW$HOM!|20E@NmJ=?9pJB>7pDE9*Plt96|WZ(2fkEjA|8?{;JE_3QMt*ksuEhI#6e@_*Y; zN>VPb+x~m}QU7$ltw+NHY&ab()i30Zdn5OH?R2iYVfUI`)_qov^Nsla3apK?J;haq zAOHDOs@+qb_S@J+>vp;*cGJI;4)kL$E+a-N@5JYb;~oy-F3&89eH|M5&WC(q!lcz;O+_rkFMa(!6OPyk|3*sng0M*izc}M diff --git a/bin/fi/oulu/tol/sqat/Item.class b/bin/fi/oulu/tol/sqat/Item.class index 478a73984862181a0a6b22a57fca5a1788d6a3f6..86c608e1a130d3506ba1bc783f500e2d34d0181d 100644 GIT binary patch delta 30 gcmeC;=;GLLiBXV&ft7)c0R-3?I6&0q$BgPs08#Y>lK=n! delta 30 jcmeC;=;GLLiBXV|ft7)cfq{XMft`T^L~nk~sLlicQXd4C diff --git a/bin/fi/oulu/tol/sqat/tests/GildedRoseTest.class b/bin/fi/oulu/tol/sqat/tests/GildedRoseTest.class index e44e81ce2b232358b6069c215dc740c0984c2b8c..bdf6858d11d7a3718032f833341567b2faf87f6f 100644 GIT binary patch literal 4445 zcmb_e-*Xe!89i&umTU`K7-4=V*Fb{&17t%)0TY64z!As>Y~c*FiF+-r#Tt3n?5+&% zv`yQPrhRB;GSkkqeP}w9X)|g2(9EQUBr}~p_h0B!pZYg+rW5zv-PJE!a(DhmiJd|$I)g9MKP8r3#o}aZGJ7@YJf2f?H3Kxa4%_SO$^Ly2u)gfy%VkI ziXx0i7`rqa+95(GqUh=XAwz1x_iU412jLmGAurNkBev8&sLyDsLbY$x{Ph*IGN4f_(As>E}yZJ33z zbb4T3(HBwlE{M;1m$DRvD%WrDE?5*j+xcA@qwSc6dvAwuCw zburb_$tX@CsUcF(U4=_2mKg9EmRzHl%ovQ>g;AUd<1|Bf+$$?lyn+-B!_$;Bkq%DQ z*l(uy(QOI%eLGq!o?;bE|JdQ_JYmog;G)4oR(jr6%FQ-*tS??@jgHZ9a%cEKp{fih`(*I)o1m~qL!ycx2s~rC zGkSqtyrz#Yu@!ywoCvgD7E?%Orz%G`r#x#|t6F!-uwvifb$nWbO{V6Nx|Tjq5q`^d=Y*QDcmuvIk- zGlKgXUam#W0_VL093R3}M}&055|6PTidKPsSFz_x#if!hNxR5dQhpj1uS?$uv$9}H z+v2*Z;dpsnJoIM-Q{-%2I=UkaGmxh2n_HynFgnB5keJcebbFdZGJ9W|sgVc>XQ&3Z z#buEi@hodvrceijuL?DP@j($x%hukosCw6YJSW*60XF zt&_Dll>O9iYZ!Z;)Qjulv=|*xjp;E7u$O`KX*l~l2=3dup4tN8iG~Z$3E_-LHAAqE zeK2R0Y+BP$H}Rh8&7Wn#PN}iZyNl-IsAeaq8=T*w{KmVVe>?az!Bvf)vB9V49Q+c| zyHC;mH}rhUcP-e>zun&Xg9zaedT#QwXz2VAf4$J%4<{;RDy1*7-l1di6^OjL5dRG0JRAm=B{8RGYE z1ynLaUg8sNu}(k9GYkxEV0e1C^>d80;2+pO6UW(;8#wpwGh9>y(3aZSVP4JkZf z6jie0N+Lqd3{{{`6Mb(wjvK=pm?qv^RlI#X1)OKZ3&is(i*XspFz(?Le!L3K!yY<1 zhD_&(uBC!5!U9iVir6${cSc7j4FLAuiQ^5TQ)+HQH$@z2bm2PD-5|P519V+D5TNU$ z_3F|2Yd*TW4blCJT$FaHSoq?{=pe=?+UB9(ZvM9s)O!l&?+^}sj8N+{d`F2Hsww_$ z7IT(PzD=iRX@Wb1JkMW8Z`2e&6^Po3UHC2}W#iAvfWR^CTdb4UUsD8f%ykN(|M5q4 z+a}|-hM|Qq8s>3+<~O-q^QwifR7sW^lKwX-E6=AYBtvCyPlqoBGPG_Up$xqR#X0n0 zbJA}z#akpLiDZ$kmu$Z!k}fnL9l^dOtO|2b&)^Y!iipfz@@X}kBX#9;*uUt>|f;a8Z(B=v`+?yy;1w(ujI!{ZwI=PQjg zT4{LSw5s8|dA7dc)tcY%c0&^X2}oS7Cvh-#AeL{=!ci1rr$1_5${#S>+ia&Fv#HsoncHj_)-q<1d)!eNz8`)PG6pzap7mb2|Q}hPs-Q>iUXs zn)`FRKbSp=dN;mbS4Mx$FQXE+dfk<;o~A51c4G0vIDXWO#fQxEdt&;CEdD?ie7Qf$q@<(u_cwRcku~$3`H7 ziGd49f}}wtH<09kC;-yDKprClA5ff$fgh?$07!!jG6u?k4Px2BAc!!C3#gOrI{Ec0A=ngcK`qY diff --git a/src/fi/oulu/tol/sqat/tests/GildedRoseTest.java b/src/fi/oulu/tol/sqat/tests/GildedRoseTest.java index 7aceb2e..cde24a6 100644 --- a/src/fi/oulu/tol/sqat/tests/GildedRoseTest.java +++ b/src/fi/oulu/tol/sqat/tests/GildedRoseTest.java @@ -5,6 +5,7 @@ import java.util.ArrayList; import java.util.List; +import org.junit.Before; import org.junit.Test; import fi.oulu.tol.sqat.GildedRose; @@ -19,7 +20,20 @@ public class GildedRoseTest { // Item("Sulfuras, Hand of Ragnaros", 0, 80)); // Item("Backstage passes to a TAFKAL80ETC concert", 15, 20)); // Item("Conjured Mana Cake", 3, 6)); - + + public GildedRose store; + + public GildedRoseTest() { + store = new GildedRose(); + } + + @Before + public void FillBasicGoods() { + store.addItem(new Item("+5 Dexterity Vest", 10, 20)); + store.addItem(new Item("Conjured Mana Cage", 3, 6)); + } + + @Test public void testUpdateEndOfDay_AgedBrie_Quality_10_11() { // Arrange @@ -34,9 +48,143 @@ public void testUpdateEndOfDay_AgedBrie_Quality_10_11() { Item itemBrie = items.get(0); assertEquals(11, itemBrie.getQuality()); } - + + + @Test + public void testUpdateEndOfDayRegularGoodsSellInUpdate() + { + // Arrange + List items = store.getItems(); + Item vest = items.get(0); + + // Act + store.updateEndOfDay(); + + // Assert + assertEquals("SellIn value for regular goods not updated correctly at end of day", 9, vest.getSellIn()); + } + + @Test + public void testUpdateEndOfDayRegularGoodsQualityInUpdate() + { + // Act + store.updateEndOfDay(); + + List items = store.getItems(); + Item vest = items.get(0); + assertEquals("Quality value for regular goods not updated correctly at end of day", 19, vest.getQuality()); + } + + @Test + public void testUpdateQualityNotNegativeAfterUpdates() { + + for(int i = 7; i != 0; i--) + store.updateEndOfDay(); + + List items = store.getItems(); + Item cake = items.get(0); + assertTrue("Quality is negative after updates", cake.getQuality() > 0); + } + + @Test + public void testQualityDegradesTwiceFastAfterSellin() + { + // Arrange + List items = store.getItems(); + Item log = items.get(1); + + // Act + for(int i = 4; i != 0; i--) + store.updateEndOfDay(); + + // Assert + // Starting from 6-1-1-1-2 =2 + assertTrue("Quality is not degrading twice as fast", log.getQuality() != 1); + } + + @Test + public void testSulfuras() + { + // Arrange + GildedRose store = new GildedRose(); + store.addItem(new Item("Sulfuras, Hand of Ragnaros", 0, 80)); + + // Act + store.updateEndOfDay(); + + List items = store.getItems(); + Item sulf = items.get(0); + + // Assert + assertEquals("Sulfuras quality decreases in update", 80, sulf.getQuality()); + } + @Test - public void testUpdateEndOfDay() { - fail("Test not implemented"); + public void testQualityNeverMoreThan50() + { + GildedRose store = new GildedRose(); + // Arrange + store.addItem(new Item("+5 Dexterity Vest", 25, 100)); + + store.updateEndOfDay(); + + List items = store.getItems(); + Item vest = items.get(0); + + assertTrue("Quality is over 50 for non sulfuras product", vest.getQuality() <= 50 ); + } + + @Test + public void testBackStagePassQualityIncreases() + { + // Arrange + GildedRose store = new GildedRose(); + store.addItem(new Item("Backstage passes to a TAFKAL80ETC concert", 15, 20)); + + // Act + store.updateEndOfDay(); + + + List items = store.getItems(); + Item pass = items.get(0); + + // Assert + assertEquals("Backstage pass quality not updating correctly", 21, pass.getQuality()); + } + + @Test + public void testBackStagePassQualityIncreasesByTwo10DaysToConcert() + { + // Arrange + GildedRose store = new GildedRose(); + store.addItem(new Item("Backstage passes to a TAFKAL80ETC concert", 9, 20)); + + // Act + store.updateEndOfDay(); + + List items = store.getItems(); + Item pass = items.get(0); + + // Assert + assertEquals("Backstage pass quality not updating by 2 10 days to concert", 22, pass.getQuality()); + } + + @Test + public void testBackStagePassQualityIncreasesByThree5DaysToConcert() + { + // Arrange + GildedRose store = new GildedRose(); + store.addItem(new Item("Backstage passes to a TAFKAL80ETC concert", 4, 20)); + + // Act + store.updateEndOfDay(); + + List items = store.getItems(); + Item pass = items.get(0); + // Assert + assertEquals("Backstage pass quality not updating by 3 5 days to concert", 23, pass.getQuality()); } + + + } From 8dd39bb475d275f0092b778914757f7e992a337f Mon Sep 17 00:00:00 2001 From: entropai Date: Mon, 17 Oct 2016 18:22:43 +0300 Subject: [PATCH 2/2] Assignment 5 finished --- bin/fi/oulu/tol/sqat/GildedRose.class | Bin 2131 -> 2619 bytes bin/fi/oulu/tol/sqat/Item.class | Bin 1034 -> 1633 bytes .../oulu/tol/sqat/tests/GildedRoseTest.class | Bin 4445 -> 6222 bytes src/fi/oulu/tol/sqat/GildedRose.java | 134 ++++---- src/fi/oulu/tol/sqat/Item.java | 32 ++ .../oulu/tol/sqat/tests/GildedRoseTest.java | 319 +++++++++++------- 6 files changed, 301 insertions(+), 184 deletions(-) diff --git a/bin/fi/oulu/tol/sqat/GildedRose.class b/bin/fi/oulu/tol/sqat/GildedRose.class index b904cd2a2f60ff47b023e9e0b84ddbe56eddc526..c22437f106759a74149728114d51f495fd99f024 100644 GIT binary patch literal 2619 zcmaJ?TXzyy7~PZG5HgaBxoNaTt2HE1)Osy3mJo7jNQgk9##VX)CuDShI5XJzQ_N%g z;7cFcx|WxAt*$=zH+41LX8<9RmIr3ecfQO1_IH`T{`u_>0AFBFN1KMRZ8Kc1Se39_ zw!+Rc;f5DXD=+h@vLkhLXy|()o{O+0N`-K8>xs;{8cw9w6Z7k-Xga$XU7gD&=d-Ek z!fG^?OlufOH1yN1ZI%iV4aZ{TlH-b!yCJNK^r2hB$#liquGqqv3NDILK3LukrbMA6 z?6RYwJGu~`%g&~j;yxJaSdjVPtZhmSq1k9`Ih~401?eiUgf}q$F#-mfY!Ut+tPXd_q^HxZ$Q#9{ zQ(ffqDk!Tp-m2;)8QSQHo8-gv{Ez&H zdktOF9)EtcW6Hn;hICxgaJ&&JYTM$4Dw7`& zFk84~Tf^`nzL<(9kM!UMZt1v5mKzc3w+3$GOF}NmJ$B1r-9yu8M089u*CYGEj|gTA z+{ITUmepJpMHc(8m)gMi*&nk8Vwlt5Hyzde)#g9MVof=;snq8UEGYFc(`oAMtm^)> z>i#u0ze2EN;A<>1t}R7wN9I?=o>?j0s|d?ByRf3bkh7 z9?q}^JDgifwuDF<$fyv39pP+ByWC{DVc@<(Ichrf@mIs2+^&zliv7^QrWZReKZ+f} zHwL~{cY*p{T3XgpNx{k*_)fvLD8#Wzg9EZe!dJ8%-6=;BG|sSQ4! z{Y~c{o{u%11H9#~q5goUf1GC@1~Ej*FeT^tRKHH`HAa5nOB+t`Uj+aRI#UwxG=@`r zt2#ODnO>q)X?6UHk)J)ihGnm3X;km=2|o3F1ids=*cg2&zdf{_e2=qjxZeow_pTJu zLC?)_Rkh}ZMi@uP3(l3mr*asjjsnv=@fMT6Tz2|;en5aP%w6S{@MK+wWsSUs*}K3D zv%AaM&N8DIvCTCVBUHnx5O$z#P;~)EyB7L2L#wulG0Ytm%X*31ldQu_^z%dzlYFpN z=O|=VdM4W6pxh_|rS&2-KwTvZAT^z&)4(#0ldzLqfuA7Bz$pUCkm_~P{D9CO687T{ zEIMKv}?zsca`7LNM c?>Wj`9%;^RLyNg8Sxa>D2y+e3J&fP~3r&9wXaE2J literal 2131 zcmbVMOK%%h6#nkmi60qa*C}amn|9Jbu$vHv7D7{p7RPxuu0!g`sD(vu?6Es#Vkh$e zr9wgic3q&h3q*w~5fUv69~hLv6^Zw z!ISZ;q=)9k*i~4gBU|X#spp`g$N?cH>hie zpEkfj$ytV0DJO$8k8k?$M$@>}d@?45I^F7)&2`g{vou&UyzrrE@v^FHa??~z#i}Y? zSxe0?r!r?J=GM|mp;{@Z25of==VT-?%@8CCtAwFh+s=?J`9aeb&Dna%Hn=&aEb>ZG zsg{(>oJQEFnj-lf87a(Avgu0pk`j60os}^spaTS*Q+0i*BCHEC7DY~ga%xr~=0zFH zBGzkaH%SJj(X&M3owH~&m-uFVeuKHHZ4}gbO-y*GF=gYTkr<)_;i1z@gv6}1L{Kl*T({M3E))4wR2CM=2GJ(N4Tha(c+YZMPUt}t;tLkNGv~>qNor&CX7jmx~-MQ{IyVn%b@>y%=bLssBSd`HAKzG2me}62FiN`sk zH|Y?7?u#x&=~6sK7tC>d00p057@uMUcM-!wx|jFqrg?&K{DBD;p__9Alk6Pbj#qJk zZ6U>OW0rk~dG;8K>{nc5zazu`L{^GoRT{*aw2Zuz#T98C?@OOyK)Q`<|D7I5`Vtvj iA|6?K`VshxZju9RAK=ab7A6mHYvPPJm@DL!@b16uzSTPb diff --git a/bin/fi/oulu/tol/sqat/Item.class b/bin/fi/oulu/tol/sqat/Item.class index 86c608e1a130d3506ba1bc783f500e2d34d0181d..7a803650c17bea09cad851e11a5ae49ad1aeb88b 100644 GIT binary patch literal 1633 zcmaJ>+fEZv6y2wtwsbnZ0HqZHwSuJ`F2n6XA|V)~NfW@BnkMq(&>mrMI)!#>@K+2k zzVo1oVB&)x;71wPIWsK<1|K?eE_<)F_S(Di=kKrIM6^n4F$ysn`(PQZuH7}q&Q}iGaA{xx~jTu%Q<+)DB9t+U2zz(3ZvLb z*R(D7GmbYb$8t9rE$eF4O}l2cEwT3x z75C8UK>l{1Qz$&!=4SnnH+IZZtK00uqlmpYxF2g2ry)kks%zFi?wH3uZtBqN?D2N1 zpAfe?FHeuHHgAZuS&d>ME#2UC5OjDyE^RqCPEx&?Ug5EWo?+Qi`L^u>e^H|dMd24h zdufo2-l;h0ld08Kw_WG2Ea6XF%*LYVJrw{E#vF+saPTCdSH4j$-bqBLl)zKN&ZZD4 zcxUyWl+@=gDWgwbVmEb3_rBviL=$-CfJLxNL1rAeDddgOZKES@}v4sj&+|S;c>k8alO{5vH{b;of*LE)z8qrp44kF zMIp6#H31&XEMQ83Fmp8TS8U)dIuSvg3*WHtba?%oA4rb)HQ~F3Ve;(SM6?)~s6KZ= z3peSPFj~tJA?HQ;2#EKGj*&r20YZvmum**!1q#8J>Xwj+03V)$Zv74+V&;Vd%Yi}) hH-&5j3c*(~NQj)5!M<)m$n!gdh`*c=vLZ`g{Rd@L*5m*H delta 339 zcmaFJ)5XDc>ff$?3=9m$3_2URJQycGWmL9Q;$dKAU}I$9OiwKdPR+^j%wuF=*3k6i zWME`a<6&TD;9z9n0?GxJCgx<8RDy&xc^EhuI40{d*)XzC&SGkp(+3JN0?lRB+QOi? z0mxutkOq=$U_rsj1+1cz|FDRQDQ<*IaRHSuFo*!H7M-lgDzBl;paN9P0~A9xOLYxg z1H>$GpjkSxs_5oO0nL$SkO3+d1DngnAj=>JR4^iK(|2_>{>oHaWM^a VTNHq{C{DI!lV{fgn#{zY4FI3fC*S}8 diff --git a/bin/fi/oulu/tol/sqat/tests/GildedRoseTest.class b/bin/fi/oulu/tol/sqat/tests/GildedRoseTest.class index bdf6858d11d7a3718032f833341567b2faf87f6f..4bb8e316724bc08b00ffa5729f4116e93a1f8ad6 100644 GIT binary patch literal 6222 zcmbuCS!^3s6o${u=80n(6GAC1lwm0(#;NVJZUQNVv`tHj)0QR#N&z#8C(g8!nRaHJ z5_S-!l(Ib_#PWg=%L_uRZP|H1h~)(#mKTIrUJzn=LWo7cf5&5cTHn}%NEO#JckZ0; z{P#cS-hBA?Yi|+J3VI+!4UCpeX$iBS7ZQ%CC+t0nlWku_D zitbcqm4vPs`NWoqo$92+sM&T*OJ#Iwrs_477Ys0JS*;nGvxZS)SNAxhrgdgc4O1hv zMJPm4h>l~lq{bV<6rr|O0z!nEsfAH{Ml;mSg_#M}8dD~85OieBNkt!5ERA1#H=CSk z&1Q5?HJvC)aCY(gm+j6ejyh!IwoI*8=CXr%HMiE%)a<1NMc16UY;QJ|WOVYjg5hX0 z>bPcWh&X5%rlUBTX&_)UV_Nyd&H{2yaQOy8bTXq8t1=vR)ESAEFlyyNWF93rr7Dj^XgMXYw3v+~yN11) zKBElqtWpu`r4@|Ac+Qj3^~114X+}%ETe3MNm&K4ZW71L;TeX{ES^m=&rt=7Lo)3{L z8V}mGYB>>FO&2hVDDKtJ9xN9!5sA2I6L(>VKY;~h#D*EQO(~i_qT05SckNWAJfrR) z?nouG>7+#K8O6t@RoR!8V#pfQl{H&7)LGS%XHYw`GmZP{WGTVkfF?}Bgc5;!=$I%1 z@nmPOHmS{ILLnLhhY%*iQv@3d;PI@2oZSix_lpi@ay*j!o669Y3RU1s#HjR7Hg zkA*;J(}MQ4?IMWVRynP*TKxzd^x2}Ydl_vA2)W`|$n;T+rS5Z5P=FQx0k){&b^!dOX$QXKoJKsa5A z0(tb_T=Y%^x|dNW?(^NG)E?beVUHg*3)ZB%LE}fW6Dmi+F&u`L^PLrk7i|96&>4Pl zq{HVze8*uBpRKrBi%~unjUA?N>~)H4KTHc=q4pPWuYr!o=K^&xw1zGO zNDqbSA{qo5L!u(YyFJAI3Su-I?XAtYjx!Dk85e`<6bP^shq%*lUX!U0OHg6#_ZZJD zGcNZrZWJ;KWNfS_&LhA0wZn-ir5hCti8~#id%&$t^wjjKwJyNbwFGX#G$~5+k}YwJu{{&W~^N= zqpLf{N8({2;3fcO0Js@|TL8EfieBmiOqZ9rjjr&jMJiXz_Mm`GHJw-lY!w2I1KJs z3PpSn8_Pr3SRO{tegqrKqiBqe`50?&EPDbohU+m}oKf5p9|z+TV0;pcPl54iFg_EQ z(Fx2b{SU@x!T1~)p9kX$V0;mbF9l{S2pOxp&aS$Mvs}jOgiCz{c6<$Xd;@lT6Lx$H z_42k4(cg8dOZxhth%NP0tbzD05Z?ph`#}5vh#vy+qriwa2obAGdRJpT#2ZKA;*$Ot zfS&;HQviMjz|T?AU-$t1C0)|6visdE1QeHaol{PYv*MSq;#aWZ*RbL@u;RC{;&(pA z+9iF9kWpyGT1Rg5#ap=*Zx>qed&u|$Wc(2_{sb9+#ybDvL-bp*x^>?X5OH5~G*o*7 z+|LmY2oZk;;%`9w9f*Gb@lPQBH4kEGr7L^%K_Ozb73&~E#e3#Ch%x+O#u{lMYo-`$ ap&k~Zl}z#h`mI>fuwupg@aIhf-TyCsrUWnm literal 4445 zcmb_e-*Xe!89i&umTU`K7-4=V*Fb{&17t%)0TY64z!As>Y~c*FiF+-r#Tt3n?5+&% zv`yQPrhRB;GSkkqeP}w9X)|g2(9EQUBr}~p_h0B!pZYg+rW5zv-PJE!a(DhmiJd|$I)g9MKP8r3#o}aZGJ7@YJf2f?H3Kxa4%_SO$^Ly2u)gfy%VkI ziXx0i7`rqa+95(GqUh=XAwz1x_iU412jLmGAurNkBev8&sLyDsLbY$x{Ph*IGN4f_(As>E}yZJ33z zbb4T3(HBwlE{M;1m$DRvD%WrDE?5*j+xcA@qwSc6dvAwuCw zburb_$tX@CsUcF(U4=_2mKg9EmRzHl%ovQ>g;AUd<1|Bf+$$?lyn+-B!_$;Bkq%DQ z*l(uy(QOI%eLGq!o?;bE|JdQ_JYmog;G)4oR(jr6%FQ-*tS??@jgHZ9a%cEKp{fih`(*I)o1m~qL!ycx2s~rC zGkSqtyrz#Yu@!ywoCvgD7E?%Orz%G`r#x#|t6F!-uwvifb$nWbO{V6Nx|Tjq5q`^d=Y*QDcmuvIk- zGlKgXUam#W0_VL093R3}M}&055|6PTidKPsSFz_x#if!hNxR5dQhpj1uS?$uv$9}H z+v2*Z;dpsnJoIM-Q{-%2I=UkaGmxh2n_HynFgnB5keJcebbFdZGJ9W|sgVc>XQ&3Z z#buEi@hodvrceijuL?DP@j($x%hukosCw6YJSW*60XF zt&_Dll>O9iYZ!Z;)Qjulv=|*xjp;E7u$O`KX*l~l2=3dup4tN8iG~Z$3E_-LHAAqE zeK2R0Y+BP$H}Rh8&7Wn#PN}iZyNl-IsAeaq8=T*w{KmVVe>?az!Bvf)vB9V49Q+c| zyHC;mH}rhUcP-e>zun&Xg9zaedT#QwXz2VAf4$J%4<{;RDy1*7-l1di6^OjL5dRG0JRAm=B{8RGYE z1ynLaUg8sNu}(k9GYkxEV0e1C^>d80;2+pO6UW(;8#wpwGh9>y(3aZSVP4JkZf z6jie0N+Lqd3{{{`6Mb(wjvK=pm?qv^RlI#X1)OKZ3&is(i*XspFz(?Le!L3K!yY<1 zhD_&(uBC!5!U9iVir6${cSc7j4FLAuiQ^5TQ)+HQH$@z2bm2PD-5|P519V+D5TNU$ z_3F|2Yd*TW4blCJT$FaHSoq?{=pe=?+UB9(ZvM9s)O!l&?+^}sj8N+{d`F2Hsww_$ z7IT(PzD=iRX@Wb1JkMW8Z`2e&6^Po3UHC2}W#iAvfWR^CTdb4UUsD8f%ykN(|M5q4 z+a}|-hM|Qq8s>3+<~O-q^QwifR7sW^lKwX-E6=AYBtvCyPlqoBGPG_Up$xqR#X0n0 zbJA}z#akpLiDZ$kmu$Z!k}fnL9l^dOtO|2b&)^Y!iipfz@@X}kBX#9;*uUt>|f;a8Z(B=v`+?yy;1w(ujI!{ZwI=PQjg zT4{LSw5s8|dA7dc)tcY%c0&^X2}oS7Cvh-#AeL{=!ci1rr$1_5${#S>+ia&Fv#HsoncHj_)-q<1d)!eNz8`)PG6pzap7mb2|Q}hPs-Q>iUXs zn)`FRKbSp=dN;mbS4Mx$FQXE+dfk<;o~A51c4G0vIDXWO#fQxEdt&;CEdD?ie items = null; public List getItems() { @@ -19,80 +22,87 @@ public void addItem(Item item) { public GildedRose() { items = new ArrayList(); } - public static void updateEndOfDay() - { - for (int i = 0; i < items.size(); i++) - { - if ((!"Aged Brie".equals(items.get(i).getName())) && !"Backstage passes to a TAFKAL80ETC concert".equals(items.get(i).getName())) + + public static void updateEndOfDay() { + + for(Item item:items) + { + String itemName = item.getName(); + + if ((isAgedBrie(itemName)) || isTAFKAL80ETC_BackStagePass(itemName)) { - if (items.get(i).getQuality() > 0) + if (!item.reachedMaxiumQuality()) { - if (!"Sulfuras, Hand of Ragnaros".equals(items.get(i).getName())) - { - items.get(i).setQuality(items.get(i).getQuality() - 1); - } + item.increaseQuality(); + + if (isTAFKAL80ETC_BackStagePass(itemName)) + handleBackStagePass(item); } + } else { - if (items.get(i).getQuality() < 50) + if (!item.hasZeroQuality()) { - items.get(i).setQuality(items.get(i).getQuality() + 1); - - if ("Backstage passes to a TAFKAL80ETC concert".equals(items.get(i).getName())) - { - if (items.get(i).getSellIn() < 11) - { - if (items.get(i).getQuality() < 50) - { - items.get(i).setQuality(items.get(i).getQuality() + 1); - } - } - - if (items.get(i).getSellIn() < 6) - { - if (items.get(i).getQuality() < 50) - { - items.get(i).setQuality(items.get(i).getQuality() + 1); - } - } - } + if (!isSulfurasHandOfRagnaros(itemName)) + item.decreaseQuality(); } } - if (!"Sulfuras, Hand of Ragnaros".equals(items.get(i).getName())) - { - items.get(i).setSellIn(items.get(i).getSellIn() - 1); - } + if (!isSulfurasHandOfRagnaros(itemName)) + item.decreaseSellIn(); - if (items.get(i).getSellIn() < 0) - { - if (!"Aged Brie".equals(items.get(i).getName())) - { - if (!"Backstage passes to a TAFKAL80ETC concert".equals(items.get(i).getName())) - { - if (items.get(i).getQuality() > 0) - { - if (!"Sulfuras, Hand of Ragnaros".equals(items.get(i).getName())) - { - items.get(i).setQuality(items.get(i).getQuality() - 1); - } - } - } - else - { - items.get(i).setQuality(items.get(i).getQuality() - items.get(i).getQuality()); - } - } - else - { - if (items.get(i).getQuality() < 50) - { - items.get(i).setQuality(items.get(i).getQuality() + 1); - } - } - } + handleItemExpired(item); } } + + private static void handleBackStagePass(Item item) { + + if (item.getSellIn() < 11 && !item.reachedMaxiumQuality()) + item.increaseQuality(); + + + if (item.getSellIn() < 6 && !item.reachedMaxiumQuality()) + item.increaseQuality(); + } + + private static void handleItemExpired(Item item) { + + String itemName = item.getName(); + if (item.isExpired()) + { + if (isAgedBrie(itemName)) + { + if (!item.reachedMaxiumQuality()) + item.increaseQuality(); + } + else + { + if (isTAFKAL80ETC_BackStagePass(itemName)) + { + item.setQuality(0); + } + else + { + if (!item.hasZeroQuality() && !isSulfurasHandOfRagnaros(itemName)) + item.decreaseQuality(); + + } + } + } + } + + private static boolean isSulfurasHandOfRagnaros(String itemName) { + return SULFURAS_HAND_OF_RAGNAROS.equals(itemName); + } + + private static boolean isAgedBrie(String itemName) { + return AGED_BRIE.equals(itemName); + } + + private static boolean isTAFKAL80ETC_BackStagePass(String itemName) { + return BACKSTAGE_PASSES_TO_A_TAFKAL80ETC_CONCERT.equals(itemName); + } + } diff --git a/src/fi/oulu/tol/sqat/Item.java b/src/fi/oulu/tol/sqat/Item.java index 447b7fe..46aa490 100644 --- a/src/fi/oulu/tol/sqat/Item.java +++ b/src/fi/oulu/tol/sqat/Item.java @@ -12,22 +12,54 @@ public Item(String name, int sellIn, int quality) { this.setQuality(quality); } + public boolean reachedMaxiumQuality() { + return quality >= 50; + } + + public boolean hasZeroQuality() { + return quality == 0; + } + + // Past date of sellIn + public boolean isExpired() { + return sellIn < 0; + } + + public void decreaseQuality() { + quality--; + if(quality < 0) + quality = 0; + } + + public void increaseQuality() { + quality++; + } + + public void decreaseSellIn() { + sellIn--; + } + /* Generated getter and setter code */ public String getName() { return name; } + public void setName(String name) { this.name = name; } + public int getSellIn() { return sellIn; } + public void setSellIn(int sellIn) { this.sellIn = sellIn; } + public int getQuality() { return quality; } + public void setQuality(int quality) { this.quality = quality; } diff --git a/src/fi/oulu/tol/sqat/tests/GildedRoseTest.java b/src/fi/oulu/tol/sqat/tests/GildedRoseTest.java index cde24a6..398e24c 100644 --- a/src/fi/oulu/tol/sqat/tests/GildedRoseTest.java +++ b/src/fi/oulu/tol/sqat/tests/GildedRoseTest.java @@ -1,190 +1,265 @@ package fi.oulu.tol.sqat.tests; - import static org.junit.Assert.*; - -import java.util.ArrayList; -import java.util.List; - -import org.junit.Before; import org.junit.Test; - import fi.oulu.tol.sqat.GildedRose; import fi.oulu.tol.sqat.Item; - public class GildedRoseTest { - -// Example scenarios for testing -// Item("+5 Dexterity Vest", 10, 20)); -// Item("Aged Brie", 2, 0)); -// Item("Elixir of the Mongoose", 5, 7)); -// Item("Sulfuras, Hand of Ragnaros", 0, 80)); -// Item("Backstage passes to a TAFKAL80ETC concert", 15, 20)); -// Item("Conjured Mana Cake", 3, 6)); - public GildedRose store; + GildedRose store = new GildedRose(); - public GildedRoseTest() { - store = new GildedRose(); + // Test Aged Brie + @Test + public void testUpdateEndOfDay_AgedBrie_Quality_2_10() { + // Arrange + store.addItem(new Item("Aged Brie", 2, 10) ); + // Act + store.updateEndOfDay(); + // Assert + int quality = store.getItems().get(0).getQuality(); + String failMessage = "Quality of Aged Brie increases"; + assertEquals(failMessage, 11,quality); } - @Before - public void FillBasicGoods() { - store.addItem(new Item("+5 Dexterity Vest", 10, 20)); - store.addItem(new Item("Conjured Mana Cage", 3, 6)); + @Test + public void testUpdateEndOfDay_AgedBrie_Quality_10_50() { + // Arrange + store.addItem(new Item("Aged Brie", 10, 50) ); + // Act + store.updateEndOfDay(); + // Assert + int quality = store.getItems().get(0).getQuality(); + String failMessage = "The Quality of an item is never more than 50"; + assertEquals(failMessage, 50, quality); } + @Test + public void testUpdateEndOfDay_AgedBrie_Quality_0_10() { + // Arrange + store.addItem(new Item("Aged Brie", 0, 10) ); + // Act + store.updateEndOfDay(); + // Assert + int quality = store.getItems().get(0).getQuality(); + String failMessage = "The Quality of Aged Brie increases twice after SellIn date has passed"; + assertEquals(failMessage, 12, quality); + } + + @Test + public void testUpdateEndOfDay_AgedBrie_Quality_0_50() { + // Arrange + store.addItem(new Item("Aged Brie", 0, 50) ); + // Act + store.updateEndOfDay(); + // Assert + int quality = store.getItems().get(0).getQuality(); + String failMessage = "The Quality of Aged Brie is never more than 50 increases twice after SellIn date has passed"; + assertEquals(failMessage, 50, quality); + } + + @Test + public void testUpdateEndOfDay_AgedBrie_Quality_Minus1_20() { + // Arrange + store.addItem(new Item("Aged Brie", -1, 20) ); + // Act + store.updateEndOfDay(); + // Assert + int quality = store.getItems().get(0).getQuality(); + String failMessage = "The Quality of Aged Brie increases twice after SellIn date has passed"; + assertEquals(failMessage, 22, quality); + } @Test - public void testUpdateEndOfDay_AgedBrie_Quality_10_11() { + public void testUpdateEndOfDay_AgedBrie_SellIn_2_10() { // Arrange - GildedRose store = new GildedRose(); store.addItem(new Item("Aged Brie", 2, 10) ); - // Act store.updateEndOfDay(); - // Assert - List items = store.getItems(); - Item itemBrie = items.get(0); - assertEquals(11, itemBrie.getQuality()); + int sellIn = store.getItems().get(0).getSellIn(); + String failMessage = "SellIn date decreases"; + assertEquals(failMessage, 1, sellIn); } - - @Test - public void testUpdateEndOfDayRegularGoodsSellInUpdate() - { + @Test + public void testUpdateEndOfDay_AgedBrie_SellIn_1_10() { // Arrange - List items = store.getItems(); - Item vest = items.get(0); - + store.addItem(new Item("Aged Brie", 1, 10) ); + // Act + store.updateEndOfDay(); + // Assert + int sellIn = store.getItems().get(0).getSellIn(); + String failMessage = "SellIn date decreases"; + assertEquals(failMessage, 0, sellIn); + } + + @Test + public void testUpdateEndOfDay_AgedBrie_SellIn_0_10() { + // Arrange + store.addItem(new Item("Aged Brie", 0, 10) ); + // Act + store.updateEndOfDay(); + // Assert + int sellIn = store.getItems().get(0).getSellIn(); + String failMessage = "SellIn date decreases"; + assertEquals(failMessage, -1, sellIn); + } + + // Test Sulfuras + @Test + public void testUpdateEndOfDay_Sulfuras_Quality_0_80() { + // Arrange + store.addItem(new Item("Sulfuras, Hand of Ragnaros", 0, 80) ); // Act store.updateEndOfDay(); - // Assert - assertEquals("SellIn value for regular goods not updated correctly at end of day", 9, vest.getSellIn()); + int quality = store.getItems().get(0).getQuality(); + String failMessage = "Quality of Sulfuras is 80 and never alters"; + assertEquals(failMessage, 80, quality); } - @Test - public void testUpdateEndOfDayRegularGoodsQualityInUpdate() - { + @Test + public void testUpdateEndOfDay_Sulfuras_SellIn_5_80() { + // Arrange + store.addItem(new Item("Sulfuras, Hand of Ragnaros", 5, 80) ); // Act store.updateEndOfDay(); - - List items = store.getItems(); - Item vest = items.get(0); - assertEquals("Quality value for regular goods not updated correctly at end of day", 19, vest.getQuality()); + // Assert + int sellIn = store.getItems().get(0).getSellIn(); + String failMessage = "Sulfuras, being a legendary item, never has to be sold"; + assertEquals(failMessage, 5, sellIn); } - + @Test - public void testUpdateQualityNotNegativeAfterUpdates() { - - for(int i = 7; i != 0; i--) - store.updateEndOfDay(); - - List items = store.getItems(); - Item cake = items.get(0); - assertTrue("Quality is negative after updates", cake.getQuality() > 0); + public void testUpdateEndOfDay_Sulfuras_SellIn_0_80() { + // Arrange + store.addItem(new Item("Sulfuras, Hand of Ragnaros", 0, 80) ); + // Act + store.updateEndOfDay(); + // Assert + int sellIn = store.getItems().get(0).getSellIn(); + String failMessage = "Sulfuras, being a legendary item, never has to be sold"; + assertEquals(failMessage, 0, sellIn); } + // Test Backstage pass @Test - public void testQualityDegradesTwiceFastAfterSellin() - { + public void testUpdateEndOfDay_Backstage_Quality_15_20() { // Arrange - List items = store.getItems(); - Item log = items.get(1); - + store.addItem(new Item("Backstage passes to a TAFKAL80ETC concert", 15, 20) ); // Act - for(int i = 4; i != 0; i--) - store.updateEndOfDay(); - + store.updateEndOfDay(); // Assert - // Starting from 6-1-1-1-2 =2 - assertTrue("Quality is not degrading twice as fast", log.getQuality() != 1); + int quality = store.getItems().get(0).getQuality(); + String failMessage = "Quality of Backstage pass increases by 1 when there are more than 10 days"; + assertEquals(failMessage, 21, quality); } @Test - public void testSulfuras() - { + public void testUpdateEndOfDay_Backstage_Quality_10_20() { // Arrange - GildedRose store = new GildedRose(); - store.addItem(new Item("Sulfuras, Hand of Ragnaros", 0, 80)); - + store.addItem(new Item("Backstage passes to a TAFKAL80ETC concert", 10, 20) ); // Act - store.updateEndOfDay(); - - List items = store.getItems(); - Item sulf = items.get(0); - + store.updateEndOfDay(); // Assert - assertEquals("Sulfuras quality decreases in update", 80, sulf.getQuality()); + int quality = store.getItems().get(0).getQuality(); + String failMessage = "Quality of Backstage pass increases by 2 when there are 10 or less days"; + assertEquals(failMessage, 22, quality); } @Test - public void testQualityNeverMoreThan50() - { - GildedRose store = new GildedRose(); + public void testUpdateEndOfDay_Backstage_Quality_8_20() { // Arrange - store.addItem(new Item("+5 Dexterity Vest", 25, 100)); - + store.addItem(new Item("Backstage passes to a TAFKAL80ETC concert", 8, 20) ); + // Act store.updateEndOfDay(); - - List items = store.getItems(); - Item vest = items.get(0); - - assertTrue("Quality is over 50 for non sulfuras product", vest.getQuality() <= 50 ); + // Assert + int quality = store.getItems().get(0).getQuality(); + String failMessage = "Quality of Backstage pass increases by 2 when there are 10 or less days"; + assertEquals(failMessage, 22, quality); } - @Test - public void testBackStagePassQualityIncreases() - { + @Test + public void testUpdateEndOfDay_Backstage_Quality_5_20() { // Arrange - GildedRose store = new GildedRose(); - store.addItem(new Item("Backstage passes to a TAFKAL80ETC concert", 15, 20)); - + store.addItem(new Item("Backstage passes to a TAFKAL80ETC concert", 5, 20) ); // Act - store.updateEndOfDay(); - - - List items = store.getItems(); - Item pass = items.get(0); - + store.updateEndOfDay(); // Assert - assertEquals("Backstage pass quality not updating correctly", 21, pass.getQuality()); + int quality = store.getItems().get(0).getQuality(); + String failMessage = "Quality of Backstage pass increases by 3 when there are 5 or less days"; + assertEquals(failMessage, 23, quality); } - @Test - public void testBackStagePassQualityIncreasesByTwo10DaysToConcert() - { + @Test + public void testUpdateEndOfDay_Backstage_Quality_3_20() { // Arrange - GildedRose store = new GildedRose(); - store.addItem(new Item("Backstage passes to a TAFKAL80ETC concert", 9, 20)); - + store.addItem(new Item("Backstage passes to a TAFKAL80ETC concert", 3, 20) ); // Act store.updateEndOfDay(); - - List items = store.getItems(); - Item pass = items.get(0); - // Assert - assertEquals("Backstage pass quality not updating by 2 10 days to concert", 22, pass.getQuality()); + int quality = store.getItems().get(0).getQuality(); + String failMessage = "Quality of Backstage pass increases by 3 when there are 5 or less days"; + assertEquals(failMessage, 23, quality); } - @Test - public void testBackStagePassQualityIncreasesByThree5DaysToConcert() - { - // Arrange - GildedRose store = new GildedRose(); - store.addItem(new Item("Backstage passes to a TAFKAL80ETC concert", 4, 20)); - + @Test + public void testUpdateEndOfDay_Backstage_Quality_0_20() { + // Arrange + store.addItem(new Item("Backstage passes to a TAFKAL80ETC concert", 0, 20) ); // Act store.updateEndOfDay(); - - List items = store.getItems(); - Item pass = items.get(0); // Assert - assertEquals("Backstage pass quality not updating by 3 5 days to concert", 23, pass.getQuality()); + int quality = store.getItems().get(0).getQuality(); + String failMessage = "Quality of Backstage drops to 0 after the concert"; + assertEquals(failMessage, 0, quality); } + @Test + public void testUpdateEndOfDay_Backstage_Quality_15_50() { + // Arrange + store.addItem(new Item("Backstage passes to a TAFKAL80ETC concert", 15, 50) ); + // Act + store.updateEndOfDay(); + // Assert + int quality = store.getItems().get(0).getQuality(); + String failMessage = "The Quality of an item is never more than 50"; + assertEquals(failMessage, 50, quality); + } + @Test + public void testUpdateEndOfDay_Backstage_SellIn_5_10() { + // Arrange + store.addItem(new Item("Backstage passes to a TAFKAL80ETC concert", 5, 10) ); + // Act + store.updateEndOfDay(); + // Assert + int sellIn = store.getItems().get(0).getSellIn(); + String failMessage = "The SellIn value should decrease by 1"; + assertEquals(failMessage, 4, sellIn); + } -} + // Test Elixir + @Test + public void testUpdateEndOfDay_Elixir_Quality_2_7() { + // Arrange + store.addItem(new Item("Elixir of the Mongoose", 2, 7) ); + // Act + store.updateEndOfDay(); + // Assert + int quality = store.getItems().get(0).getQuality(); + String failMessage = "Quality decreases by 1"; + assertEquals(failMessage, 6,quality); + } + + @Test + public void testUpdateEndOfDay_SellIn_Quality_2_7() { + // Arrange + store.addItem(new Item("Elixir of the Mongoose", 2, 7) ); + // Act + store.updateEndOfDay(); + // Assert + int sellIn = store.getItems().get(0).getSellIn(); + String failMessage = "SelIn decreases by 1"; + assertEquals(failMessage, 1, sellIn); + } +} \ No newline at end of file