1 00:00:01,580 --> 00:00:06,680 For this solution to recovery tasks, two and three, the next Castells is to make sure tax is calculated 2 00:00:06,680 --> 00:00:07,190 correctly. 3 00:00:12,330 --> 00:00:14,640 I'm going to read a unit has named taxes valid. 4 00:00:22,110 --> 00:00:25,440 In our test asserts the tax were expecting three point nine. 5 00:00:29,450 --> 00:00:34,430 Is equal to the tax that gets returned when we pass a 30 dollar subtotal and to get tax. 6 00:00:42,280 --> 00:00:46,480 And now inside cadaverine to write code to make the test fail public double. 7 00:00:47,780 --> 00:00:48,620 Get tax. 8 00:00:50,900 --> 00:00:51,950 Double subtotal. 9 00:00:55,220 --> 00:00:56,800 And I'm going to return fire for now. 10 00:01:02,970 --> 00:01:04,599 Run the unit test, then it fails. 11 00:01:04,800 --> 00:01:05,190 Good. 12 00:01:06,270 --> 00:01:08,550 Now we just write code to make sure it passes. 13 00:01:13,700 --> 00:01:18,440 I'm going to multiply subtotal by point one three, because that is the tax rate from the requirements 14 00:01:18,980 --> 00:01:24,530 and ideally the test should pass, but it doesn't because double digit keeps going on forever when you 15 00:01:24,530 --> 00:01:25,260 multiply them. 16 00:01:25,280 --> 00:01:27,410 However, we only want two decimal places. 17 00:01:32,280 --> 00:01:35,400 So we're going to create a new object of the decimal format class. 18 00:01:45,700 --> 00:01:49,360 And decimal format is going around our double to two decimal places. 19 00:01:52,500 --> 00:01:57,810 And to remember that decimal format objects have a format method they can call that converts our number 20 00:01:57,840 --> 00:02:02,070 or that around is our number, I should say, to the expected number of decimal places. 21 00:02:07,950 --> 00:02:13,710 However, it returns a string and you'll also remember that the rapper double has a past double method. 22 00:02:17,470 --> 00:02:20,470 Pass double passes a decimal value out of a string. 23 00:02:23,410 --> 00:02:24,550 Let's rerun the test. 24 00:02:28,170 --> 00:02:32,100 And it passes awesome, can this code be any simpler? 25 00:02:32,550 --> 00:02:38,640 Nope, so we're done refactoring onto the next case of our unit test is going to make sure the total 26 00:02:38,640 --> 00:02:39,750 calculates correctly. 27 00:02:45,580 --> 00:02:48,280 So I'm going to create a unit test named Total as valid. 28 00:02:56,450 --> 00:03:00,980 An artist is going to assert the total we're expecting ninety six point six seven. 29 00:03:06,220 --> 00:03:11,470 Is equal to the total that gets returned when we pass in a subtotal of eighty five point fifty five. 30 00:03:12,740 --> 00:03:15,110 And attacks of eleven point one to. 31 00:03:18,570 --> 00:03:24,600 OK, now back in Kageyama, I'm going to write code to make our test fail public double get total. 32 00:03:29,270 --> 00:03:31,580 They received the subtotal and attacks. 33 00:03:34,270 --> 00:03:35,680 Inside will return zero. 34 00:03:39,850 --> 00:03:41,320 Let's make sure the test fails. 35 00:03:46,580 --> 00:03:52,850 It does now good to write code to make it pass, which would just be us returning the addition of both 36 00:03:52,850 --> 00:03:55,580 parameters around the unit test. 37 00:04:01,020 --> 00:04:02,760 And it passes gret. 38 00:04:05,630 --> 00:04:07,520 Is there anything else we can do here? 39 00:04:07,820 --> 00:04:09,950 I doubt I can get any simpler than this. 40 00:04:11,500 --> 00:04:16,180 All right, we don't have any more methods to unit test, but we still haven't fulfilled this requirement. 41 00:04:16,209 --> 00:04:17,709 We need to return a receipt. 42 00:04:23,190 --> 00:04:27,360 So what I'm going to do is find a method named Checkout's that returns a string. 43 00:04:32,170 --> 00:04:37,090 And it's going to return a receipt that calls every method we just created, I'm sure there's a template 44 00:04:37,090 --> 00:04:38,050 we can copy over. 45 00:04:41,760 --> 00:04:45,270 And here it is, and it's already been done for us, that's pretty cool. 46 00:04:49,600 --> 00:04:53,800 There's nothing to unit test here, it's just a string, so we're all done part for it. 47 00:04:54,040 --> 00:04:58,840 But I want you to compare the old code that we wrote in the previous section to the one we have right 48 00:04:58,840 --> 00:04:59,170 now. 49 00:04:59,680 --> 00:05:03,100 This code isn't good because it performs way too many tasks. 50 00:05:03,440 --> 00:05:05,740 Our other methods are very long and messy. 51 00:05:08,370 --> 00:05:11,680 This code is also impossible to test, so it's vulnerable to bugs. 52 00:05:12,090 --> 00:05:13,980 Our new code is more polished. 53 00:05:13,980 --> 00:05:15,840 Each method performs one task. 54 00:05:15,840 --> 00:05:18,330 Each method is modular, and it's easy to test.