From 23766e2244101d859327ac4ac9e57e27f31bafe9 Mon Sep 17 00:00:00 2001 From: zekai Date: Tue, 5 Jan 2021 22:45:01 -0500 Subject: [PATCH] Finished AccountServices Tests...for now... --- src/test/java/runner/security/JwtTest.java | 3 +- .../runner/services/AccountServiceTest.java | 103 ++++++++++++++---- .../services/TransactionServicesTest.java | 21 +++- .../runner/security/JwtTest.class | Bin 4295 -> 4394 bytes .../runner/services/AccountServiceTest.class | Bin 5482 -> 8399 bytes .../services/TransactionServicesTest.class | Bin 3976 -> 4336 bytes 6 files changed, 100 insertions(+), 27 deletions(-) diff --git a/src/test/java/runner/security/JwtTest.java b/src/test/java/runner/security/JwtTest.java index 0434cab45..84128f562 100644 --- a/src/test/java/runner/security/JwtTest.java +++ b/src/test/java/runner/security/JwtTest.java @@ -39,6 +39,7 @@ import java.util.ArrayList; +import static org.mockito.ArgumentMatchers.any; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @@ -86,7 +87,7 @@ public void AuthenticatedTest() throws Exception{ public void AuthenticatedTokenAccess() throws Exception{ UserDetails user = new User("user2","password", new ArrayList<>()); String token = jwtUtil.generateToken(user); //bypassing spring security authentication and generate token - Mockito.when(userDetailServices.loadUserByUsername("user2")).thenReturn(user); + Mockito.when(userDetailServices.loadUserByUsername(any())).thenReturn(user); mockMvc.perform(MockMvcRequestBuilders.get("/myaccount/test") .header("Authorization", "Bearer "+ token)) .andExpect(status().isOk()); diff --git a/src/test/java/runner/services/AccountServiceTest.java b/src/test/java/runner/services/AccountServiceTest.java index 955d03f56..74dd05952 100644 --- a/src/test/java/runner/services/AccountServiceTest.java +++ b/src/test/java/runner/services/AccountServiceTest.java @@ -8,6 +8,7 @@ import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.MockitoAnnotations; +import org.omg.IOP.TransactionService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.mock.mockito.MockBean; @@ -22,9 +23,13 @@ import runner.enums.AccountType; import runner.repositories.AccountRepo; +import java.time.LocalDate; +import java.util.ArrayList; import java.util.HashSet; import java.util.Set; +import static org.mockito.ArgumentMatchers.any; + @ActiveProfiles("test") @RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest(classes = AppRunner.class) @@ -37,28 +42,49 @@ public class AccountServiceTest { @Mock AccountRepo accountRepo; + @Mock + TransactionServices transactionServices; @InjectMocks AccountServices accountServices; Account account1; Account account2; + Account account3; + Set testAccounts; Login login; Customer customer; - Set testAccounts; Transaction transaction; Set transactionAccount; + Transaction withdrawalTransaction; + Transaction depositTransaction; + ArrayList myTransactionList; @Before public void setup(){ - transactionAccount = new HashSet(); - transactionAccount.add(account1); - transaction = new Transaction(1.00,transactionAccount); - account1 = new Account(1L,"123", AccountType.CHECKING,100.00,"abcdefg", new HashSet()); - account2 = new Account(2L,"321", AccountType.SAVINGS,0.00,"gfedcba", new HashSet()); + account1 = new Account(1L,"12345", AccountType.CHECKING,100.00,"abcdefg", new HashSet()); + account2 = new Account(2L,"54321", AccountType.SAVINGS,0.00,"gfedcba", new HashSet()); + account3 = new Account(2L,"56789", AccountType.SAVINGS,100.00,"qwerty", new HashSet()); testAccounts = new HashSet(); testAccounts.add(account1); testAccounts.add(account2); login = new Login(1L,"user","password",customer); //customer would be null here due to order of code; customer = new Customer(1L,"John","Doe",login,testAccounts); + transactionAccount = new HashSet(); + transactionAccount.add(account1); + transaction = new Transaction(1.00,transactionAccount); + + //=============== setup for transfer tests below, also used in deposit and withdraw ==================== + + withdrawalTransaction = new Transaction(String.format("Withdrawal to %s XXXXXXXX%s",account2.getAccountType(), + account2.getAccountNumber().substring(account2.getAccountNumber().length()-4)), + transaction.getTransactionAmount()*(-1), account1.getBalance(), LocalDate.now()); + + depositTransaction = new Transaction(String.format("Deposit from %s XXXXXXXX%s",account1.getAccountType(), + account1.getAccountNumber().substring(account1.getAccountNumber().length()-4)), + transaction.getTransactionAmount()*(-1), account2.getBalance(), LocalDate.now()); + + myTransactionList = new ArrayList(); + myTransactionList.add(withdrawalTransaction); + myTransactionList.add(depositTransaction); } //PREFACE: we know the behavior of the accountRepo, this is unit test for accountServices; therefore, the results are set by the tester fro the repo @@ -67,7 +93,7 @@ public void setup(){ public void getAllAccountsTest(){ //given: when accountServices.getAlAccounts calls accountRepo.findAccountsByCustomer_LoginUsername, it will return the test Accounts; Set expectedAccounts = testAccounts; - Mockito.when(accountRepo.findAccountsByCustomer_LoginUsername(login.getUsername())).thenReturn(testAccounts); + Mockito.when(accountRepo.findAccountsByCustomer_LoginUsername(any())).thenReturn(testAccounts); //when: telling accountServices to get all accounts Set actualAccounts = accountServices.getAllAccounts(login.getUsername()); //the two sets should be identical @@ -77,7 +103,7 @@ public void getAllAccountsTest(){ @Test public void findAccountByEncryptedUrlTest(){ Account expectedAccount = account1; - Mockito.when(accountRepo.findAccountByEncryptedUrl(account1.getEncryptedUrl())).thenReturn(account1); + Mockito.when(accountRepo.findAccountByEncryptedUrl(any())).thenReturn(account1); Account actualAccount = accountServices.findAccountByEncryptedUrl(account1.getEncryptedUrl()); @@ -87,8 +113,8 @@ public void findAccountByEncryptedUrlTest(){ @Test public void createAccountTest() { Account expectedAccount = account1; - Mockito.when(accountRepo.findAccountByAccountNumber(String.valueOf(Math.floor(Math.random() * 1000000000)))).thenReturn(null); - Mockito.when(accountRepo.save(expectedAccount)).thenReturn(expectedAccount); + Mockito.when(accountRepo.findAccountByAccountNumber(any())).thenReturn(null); + Mockito.when(accountRepo.save(any())).thenReturn(expectedAccount); Account actualAccount = accountServices.createAccount(expectedAccount); @@ -98,8 +124,8 @@ public void createAccountTest() { @Test public void removeAccountTestFalse() { String encryptedUrl = account1.getEncryptedUrl(); - Mockito.when(accountRepo.deleteAccountByEncryptedUrl(encryptedUrl)).thenReturn(account1); - Mockito.when(accountRepo.findAccountByEncryptedUrl(encryptedUrl)).thenReturn(account1); + Mockito.when(accountRepo.deleteAccountByEncryptedUrl(any())).thenReturn(account1); + Mockito.when(accountRepo.findAccountByEncryptedUrl(any())).thenReturn(account1); Boolean deleted = accountServices.removeAccount(encryptedUrl); @@ -109,29 +135,66 @@ public void removeAccountTestFalse() { @Test public void removeAccountTestTrue() { String encryptedUrl = account2.getEncryptedUrl(); - Mockito.when(accountRepo.deleteAccountByEncryptedUrl(encryptedUrl)).thenReturn(account2); - Mockito.when(accountRepo.findAccountByEncryptedUrl(encryptedUrl)).thenReturn(account2); + Mockito.when(accountRepo.deleteAccountByEncryptedUrl(any())).thenReturn(account2); + Mockito.when(accountRepo.findAccountByEncryptedUrl(any())).thenReturn(account2); Boolean deleted = accountServices.removeAccount(encryptedUrl); Assert.assertTrue(deleted); } - @Test void transferMoneyTestTrue(){ + @Test + public void transferMoneyTestTrue() throws Exception { + Account expectedAccount1 = account1; + Account expectedAccount2 = account2; + expectedAccount1.setBalance(account1.getBalance()-transaction.getTransactionAmount()); + expectedAccount2.setBalance(account2.getBalance()+transaction.getTransactionAmount()); + + Mockito.when(transactionServices.setAllTransactions(any(),any(),any())).thenReturn(myTransactionList); + Account[] actualAccounts = accountServices.transferMoney(transaction,account1,account2); + + Assert.assertEquals(actualAccounts[0].getBalance(),expectedAccount1.getBalance()); + Assert.assertEquals(actualAccounts[1].getBalance(),expectedAccount2.getBalance()); + Assert.assertTrue(actualAccounts[0].getTransactions().contains(withdrawalTransaction)); + Assert.assertTrue(actualAccounts[1].getTransactions().contains(depositTransaction)); } - @Test - public void withdrawTest() { + @Test(expected = Exception.class) //account the money is being withdrawn from has insufficient funds + public void transferMoneyTestFalse() throws Exception { + Mockito.when(transactionServices.setAllTransactions(any(),any(),any())).thenReturn(myTransactionList); + Account[] actualAccounts = accountServices.transferMoney(transaction,account2,account1); } + @Test - public void depositTest() { + public void withdrawTest() throws Exception { + String encryptedUrl = account1.getEncryptedUrl(); + Account expectedAccount = account1; + expectedAccount.setBalance(expectedAccount.getBalance()-transaction.getTransactionAmount()); + Mockito.when(accountRepo.findAccountByEncryptedUrl(any())).thenReturn(account3); + Mockito.when(accountRepo.findAccountByAccountNumber(any())).thenReturn(account1); + Mockito.when(transactionServices.setAllTransactions(any(),any(),any())).thenReturn(myTransactionList); + Mockito.when(accountRepo.save(any())).thenReturn(account3, account1); //first and second instance + + Account actualAccount = accountServices.withdraw(transaction,encryptedUrl); + + Assert.assertEquals(expectedAccount.getBalance(),actualAccount.getBalance()); } @Test - public void transferTest() { - } + public void depositTest() throws Exception { + String encryptedUrl = account1.getEncryptedUrl(); + Account expectedAccount = account1; + expectedAccount.setBalance(expectedAccount.getBalance()+transaction.getTransactionAmount()); + Mockito.when(accountRepo.findAccountByEncryptedUrl(any())).thenReturn(account3); + Mockito.when(accountRepo.findAccountByAccountNumber(any())).thenReturn(account1); + Mockito.when(transactionServices.setAllTransactions(any(),any(),any())).thenReturn(myTransactionList); + Mockito.when(accountRepo.save(any())).thenReturn(account3, account1); //first and second instance + + Account actualAccount = accountServices.deposit(transaction,encryptedUrl); + Assert.assertEquals(expectedAccount.getBalance(),actualAccount.getBalance()); + } } diff --git a/src/test/java/runner/services/TransactionServicesTest.java b/src/test/java/runner/services/TransactionServicesTest.java index e5cb89e1a..373cdf73c 100644 --- a/src/test/java/runner/services/TransactionServicesTest.java +++ b/src/test/java/runner/services/TransactionServicesTest.java @@ -40,7 +40,6 @@ public class TransactionServicesTest { TransactionServices transactionServices; Account account1; Account account2; - Set testAccounts; Transaction transaction; Set transactionAccount; @@ -51,16 +50,12 @@ public void setup(){ transaction = new Transaction(1.00,transactionAccount); account1 = new Account(1L,"12345", AccountType.CHECKING,100.00,"abcdefg", new HashSet()); account2 = new Account(2L,"54321", AccountType.SAVINGS,0.00,"gfedcba", new HashSet()); - testAccounts = new HashSet(); - testAccounts.add(account1); - testAccounts.add(account2); } @Test public void setAllTransactionTest(){ - - ArrayList actualTransactionList = transactionServices.setAllTransactions(transaction,account1,account2); + Assert.assertTrue(actualTransactionList.size() == 2); } @Test @@ -77,4 +72,18 @@ public void setOneTransactionTestWithdraw(){ Assert.assertEquals(expected.getTransactionDescription(),actual.getTransactionDescription()); } + @Test + public void setOneTransactionTestDeposit(){ + Transaction expected = new Transaction(String.format("Deposit from %s XXXXXXXX%s",account1.getAccountType(), + account1.getAccountNumber().substring(account1.getAccountNumber().length()-4)), + transaction.getTransactionAmount(), account2.getBalance(), LocalDate.now()); + + Transaction actual = transactionServices.setOneTransaction(transaction,account2,account1,false); + + Assert.assertEquals(expected.getTransactionAmount(),actual.getTransactionAmount()); + Assert.assertEquals(expected.getTransactionBalance(),actual.getTransactionBalance()); + Assert.assertEquals(expected.getTransactionDate(),actual.getTransactionDate()); + Assert.assertEquals(expected.getTransactionDescription(),actual.getTransactionDescription()); + } + } diff --git a/target/test-classes/runner/security/JwtTest.class b/target/test-classes/runner/security/JwtTest.class index 356b71e1ae590dcf35b9ac784ac86d9e66701f58..93726e0661a91fde6d1641053ddb28e58be1343a 100644 GIT binary patch delta 1103 zcmaiz{ZmwB6vsdJ?y}E%d3YJrnKB?C6%=7nL!u1CLcmbU)kQ?JWm}gQ+11@er5EW< zr7Tge*^5eL@A^aI&>-sQ_?y)){ZfBJKlcwfo@XIo8mH#Y^PKaXd%oXup7Xu;Ug?#x zk>Bp$yaPPRRR=#IMW=&JXaP&v>CnY4<8}Mlt=Qx6GJ73fA?(mY#Nkz<+3X``yk140 zpMF0Biv11+gdFl1H1N1Xf&<1o=#V6(NIML1$l-7~N3t2_H9xN_-f$=;HuDQTP zi~RoZp>SY-I35cG)5*SgOmRsw&KHU=HD7UA@wMg~F1vsE*5!Z8cbf0{LGh#J3ZoNM z>X^5_Fp-P}1{0BizH}ncl#C4xM&s!%;dG=onoL=E!tr5?MHMUB=W2EI^hYDp=KMBo*H;@;3lzol+XHIG5T8SCyVVzWH zkS_wXyoG#fC5HHQl5b0XY3|~>x%`cIcy3<4cP9Uz?w-nE>mQ135p3&!V4u!lpAoD_ z>fXq$Zl0^#P9a<7VT)$!t{03~x_x$bJ`EX`#%UJuJKWp3MQ&SO&JM$tE8MV6?im!u z?f=VYreqj5$g*gfW&KsuF-!^fYF6p!5H(Mgs}@mS>z3T--9{*13cd2ZvMVnIQX zSDY@-EsDFY^LRnYB&DllO;Q$|vp_KNLc4{`Y^ zjaDVowP$9qP%<`(Dwbe^JWsRq{P4NhY!b9hOJ-X2WQiUYZQWR@DmL?iIYeleNn31{ XXoL=46vRt%-qwvLMKHzo6gwUOfGMNY delta 1002 zcmaizXHQf?7=@p`yD-aTWY;w$s366HN);(0qGCe@1q7t4h!yN>Z(wg&uZm(rO^orI z!60h%n=vtd@CW!O`~${!76f95=H||vnfsn|-je$&=}Th!*I(~H0ogpa@lvIzwy~&+ zAc?g$HPjkZ=cQiJVADvG%{tcGY@pd@BQ23^VzWV86kEM)^RivhY7?N!#z&i>@37g) zE`xU4>|w9XK7x_#=YTh!gNj2ou~d0EZ1y8&Icjr^lf6HzpO!nF4Ci}T zrazT5MZ2bh49#SwIR5bD^i!JCoKc+Boa4OWg61NZ6qhwu=u}+QT;sat2AwXloMxTn zbcLs+rE^o0%yh*qjl*rt3}!0sXztRbxTm>Kx8i~3A>EFxa{Z5Zta(C@;;H5tXL`%k zIZy9c{moUABpn2g^iQ(F#Z)<;iMzQn0Lzuz`dOx9l-eBIpHL9+_Yu?2_>^}{u&9~&hVX!Lf5h8QL|~#v zK%M&ov2|~W3ry-GK2_d65-R&hbb5Tz?IyE-Vue+~F`=7VXn~`KY{rr8kt@rLb z_uO;;v)*&ZU;65EF97J2kp$ZDR1BX^;4^qSj%SwQvv_vNu_4a#p9H2+j$F{NJe7*@kfmdSq$vD0c#}}3KQwglY zPwVJQG5ky%KO4u-C2$LVUP)h$;TIBU!!PQ`FU9f8G5m_|`m6f*wFHjh*Y)um`uI&{ z{4K@!+e==2)dQq#zmvf4;`em&_f^Ut#PNsv{-YTFIDtFylz#k)j$YBxpC<5U`12V4 zq6vSAze?b*@i$HQTl}5Q{k=kcHGzM?KdK)8l)yjZUzG1(b)SFJ369$F?@Id*ef+1= z{!2&yt)s6b@KyW|mkG^RCqki8mymjC;H)(2#1fr|QM|;tuPoJxgg%;LVhEbdbh=Q= zJA>9lL9nIYF6Hx83-j5ydbtmElp*{@}^U=EkQ^1>|KlQc9aVnvxTutUa)o^SHDguqI9X~6mpg=SU-=c*PkO_ zQ^eqco9D4c3{CEq2)D18VD)6i86UCDNi!SaCi93F7*)iTxv9u^f2QbAKt%O!+cu|^ z%-uQ{qR%%>MBZUF&XT(_`HXW^P~X1elAxitFhct-@6Y6|Go{?HWnVBEi*5j>&Fm%9 z&gi#KY;eXi^i^A6h(+S&0zJ#E8jF@wnh0X~YKi+Md#urdZK<)wET=o04FW)y2v%5+ zPB6Z#k$@~%#&9p0A)jDPe<2ENY9au)!i`jK8y~^VqnUglt7qzXK5b7;Q2IqX>+QF^ zWzqijk&eHnf>yk{I{#U1b4W;El#M#Mr|`^O&08HNrw!{bRq9pk2t+gNcPV#oYzI=COXENntIDL`9+}WEoi$w}you`Zg z3(6QS6r5_Ho&>trQ3bg$mR31h%3A`LbWco#a`!JNw@P;vM9n8G+nMqVO0kIvkHTWi z1n=v)axry$@JQa8EHP~v5~Q5#PNj}aaC4fI;kQ?r2K$d(9T`q{<)(^{WV@2dtft#| zq3Cq&+qdTck0i!g&di%*R*r#V;Op@9^qgp$XaRTqOnnHBt2{z829E5 z9K7=oYuh7}Y5@Zoj2XC!YcaXWkaeZmz8ehW!Grv! z+J(XKz_q6f<2+{S`wEt>*l57PHNl436_FCGd^a1gL6>aM*z-a4F@&e(wSg zDK;IwCy)2ud+N+RRZT|?8%0Ds-&ZKPhwanXGnuErQ6mf4&4I#md)i72)+I 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 diff --git a/target/test-classes/runner/services/TransactionServicesTest.class b/target/test-classes/runner/services/TransactionServicesTest.class index 6bddb4d11e1aad0e1865939ebeb41210d5d4d168..183c0c7386890a160276dce1fbd6280c55885470 100644 GIT binary patch delta 1704 zcmaKs>2nlS5Ws)4*K8(FOGxBMID!&PBCt6XJQD#Wk`OWB2#B)TY{Ej=;LHXAg+=iI zyuiWx!V?cX;^Jl{0^SPx$TR#}$)W|u^(D7I?4d-`?v>;ApBvv20PS?RO? zoHzwE@|(pBdQIXMK6;C&r%#LiVm6X6*<`Vq0Sl8Y+MP5RwAjl1VeBFtQlaKoy zLl(ts3+7+(g?T_nY!9zIVO}(O$)F@xn8BvOv*5qsa$~5BW%%R(#AclTQ?%@|n9h)R6w1VZ|3@OpYtQViW7_~ zzUHLj6r(1m72oi!-t#+??{#ZGD1PK8#n1erIHRM_>VRL#7?c$#RP@<{TPiA@iZz8_ zrDJf7J(Ntw?TF+45t=ozWK(ooG%}P*3`AONJG!GSk@+iB?yC!4-pc ze`M28GLee3I8NM78CX%z=(2|-Dp0kydX+n|XnW>hQNZUOE#8~1mzxXv!U+Won#2l; zzRtTTau%KzOr93m|Mj5ajRq-GH{E?+r$$QZHNxmj9?6VA&W%nqA-WWB2_+s zB}~0tUJdS$Y@e4sjO8sl?(fP@kEfSO0jQOWTgO!S7tED@JEUVaAnd_Y#nOpt9yTQ{}Pb3Cc4iOIh2sS;~V)Fat*k_;XAfCXK}F<}b%Dav`O1_ht(N zz2l^OrNWM-OyEwIN$+j4rU%S>+QnKf9{Do-O@&EE^El(X#BZ=-th@6RdHWn5#q6Fq zJ$N$BjBbCvy_ucefxJ~wP+4Y~y;-j6%yG52tSqy$RF*PlbB?e$f?29^RF6>8CU5_n zHjqPxo!c&A_FQ>#%oB6InDg^yM9fHzw075uT`TVKv#612kaI7SQ=ccgQ6}gRPW{5d z7XG{BJom8_msXEdMSiLRsSeS13qwQV=g}#aZ|uDCM7k~zN%Lm`$pH^ZUGQXqhzwUC zB9|$Fkfs3QQXJZa!*ZFVT{!63RfZ{a9A?NVf{rp_*mH@n0-<}U*{&dimL_Mnspcs-K^DijCI^2#(HtaxR?9H-mnh8 KL)4+iA@(mVjzV7m delta 1321 zcmY+D*>@9F9LGO1Stc1S=K!ZFAV`Z+X-Em(a2HBJ3ba&>iUAeUBrPr2Y9_5(#ke6w zT!6uax^K9Hn34u6pidrs@=x%=H(z+sM~}Zd6RgfT_qVU#d*@Q!_>$r;f1kSmwDP0P zVs=@iZA^AWSw*iVnOS7XS@hZTv)jgEK${0G_So#@;Rr)fhIu5sHYH``i}0w;Eb<{= z#f;$Sh(d%BojIz>W12i}^F)@h2v1r(rE~Ua^0ZBnXEb?Mljn5H=XLWJ!WS?3HFem2 zn-@8to#QqKc}Z$<$mV5U(Y9ALc}K6J#n|Swlp^>-uHa{ zeYtF=H?6pV)ruQ+uO^x;K2UtfNA6g-W&6i`qWF{(7N03T=L^M`e5LrBZxkmvrTCW9 zitjjOQBq8DMmH*3OzC+linE-vm{xqxdBp{ta8bwnzzMg`ikC9hRi=9~IvNZtZ`f2? zYKP6abB6Q%iNTSffkL9)adP>BTd(#PSIHZJupF5XgBDLSn|EXWIO7jHtiAv_eD!ZwApBxin^tGjgPfVZFi=@1xd zBvV(v(od>ZuaTuTv03OA@#*z_OP5HOJ9mr6V5`?zH~x!aREoo~X{^+|MWOR7P6hnV z*CbOxUs_USWooT#nYv_!rDC$nTwCV48kX&;5D`PD%=HzPPtnjN+W!^_R*02Z(Y-=) z;&Lj)MQn_hi!}Q3N-?kW#e|3n5oa)u$(12{E|kk`6y7S=*+ZxN@S6qqErNR&<8;e! zx79