Gustavo Martin Morcuende [Sun, 4 Dec 2016 22:32:32 +0000 (23:32 +0100)]
Merge branch 'master' of https://github.com/gumartinm/JavaForFun
Gustavo Martin Morcuende [Sun, 4 Dec 2016 22:09:17 +0000 (23:09 +0100)]
Fixing coverage in Clock.today()
My implementation solves the coverage issue (hopefully it is right)
Gustavo Martin Morcuende [Sun, 4 Dec 2016 20:36:27 +0000 (21:36 +0100)]
How to configure IDE Eclipse
Gustavo Martin Morcuende [Sun, 4 Dec 2016 20:35:31 +0000 (21:35 +0100)]
We end up writing our application based on the acceptance test
Gustavo Martin Morcuende [Sun, 4 Dec 2016 20:30:50 +0000 (21:30 +0100)]
PrintStatementeFeature requires the right values for clock.
Gustavo Martin Morcuende [Sun, 4 Dec 2016 20:21:43 +0000 (21:21 +0100)]
BIG WARNING: Clock.today() is not under test!!!!
Our tests do not fail even if we return null from there...
Gustavo Martin Morcuende [Sun, 4 Dec 2016 20:11:59 +0000 (21:11 +0100)]
Making StatementPrinter and StatementPrinterShould look better
Gustavo Martin Morcuende [Sun, 4 Dec 2016 20:09:46 +0000 (21:09 +0100)]
StatementPrinter, test for print method green
Gustavo Martin Morcuende [Sun, 4 Dec 2016 19:02:02 +0000 (20:02 +0100)]
StatementPrinterShould is failing for the right reasons.
Gustavo Martin Morcuende [Sun, 4 Dec 2016 18:49:14 +0000 (19:49 +0100)]
The acceptance test is failing because we need to implement the print method in StatementPrinter.
We always write first a test and then the implementation.
In this case we have to create the test called StatementPrinterShould and from
there we can create the implementation for the print method.
Gustavo Martin Morcuende [Sun, 4 Dec 2016 18:32:51 +0000 (19:32 +0100)]
Clock test is green.
Inline as much code as possible (getting ride of variables)
We isolate and control the randomness in our code.
No using spies, instead, we use private classes in our tests.
Gustavo Martin Morcuende [Sun, 4 Dec 2016 17:47:15 +0000 (18:47 +0100)]
Clock test working but we need to control the random part.
We need it in order to write tests that will work in any day.
Gustavo Martin Morcuende [Sun, 4 Dec 2016 17:36:34 +0000 (18:36 +0100)]
Renaming local variables in TransactionRepository
Gustavo Martin Morcuende [Sun, 4 Dec 2016 17:35:51 +0000 (18:35 +0100)]
Removing duplications from TransactionRepositoryShould
Gustavo Martin Morcuende [Sun, 4 Dec 2016 17:34:45 +0000 (18:34 +0100)]
Now we have a test for addWithdrawal
Gustavo Martin Morcuende [Sun, 4 Dec 2016 17:31:12 +0000 (18:31 +0100)]
It is only left a test for addWithdrawal
Gustavo Martin Morcuende [Sun, 4 Dec 2016 17:25:48 +0000 (18:25 +0100)]
Tests failing for the right reason
We need to keep implementing methods.
Gustavo Martin Morcuende [Sun, 4 Dec 2016 17:13:27 +0000 (18:13 +0100)]
Tests are failing for the right reasons
They throw UnsupportedOperationException because we need the implementations.
Gustavo Martin Morcuende [Sun, 4 Dec 2016 16:41:58 +0000 (17:41 +0100)]
We have a green test for AccountShould
But PrintStatementFeature is failing because the acceptance test is using
the real classes, it tells me what has not been implemented :)
Gustavo Martin Morcuende [Sun, 4 Dec 2016 16:33:11 +0000 (17:33 +0100)]
AccountShould is failing for the right reasons.
We can now implement the printStatement method.
Gustavo Martin Morcuende [Sun, 4 Dec 2016 16:21:38 +0000 (17:21 +0100)]
We have to test the printStatement method in Account
Gustavo Martin Morcuende [Sun, 4 Dec 2016 16:16:15 +0000 (17:16 +0100)]
Delegating the responsability of storing transactions.
TransactionRepository will store transactions.
Gustavo Martin Morcuende [Sun, 4 Dec 2016 15:57:30 +0000 (16:57 +0100)]
Creating test for Account.
Always write first your asserts.
Gustavo Martin Morcuende [Sun, 4 Dec 2016 15:19:08 +0000 (16:19 +0100)]
Now we have test expecting some result, it is now failing for the right reasons.
We are using the double loop of unit testing:
* First, start with an acceptance test.
* Second, once the acceptance test is failing for the right reason then you
go to the inner loop of TDD (the unit test) we can start unit testing our code.
Once we have all the classes under unit tests our accpetance test should go green.
Gustavo Martin Morcuende [Sun, 4 Dec 2016 15:18:39 +0000 (16:18 +0100)]
Test throws UnsupportedOperationException as expected.
You should configure your IDE for throwing UnsupportedOperationException
whenever it automatically creates a method. In this way, when running
our unit tests we are able to find out what is not yet implemented.
Gustavo Martin Morcuende [Sun, 4 Dec 2016 15:03:32 +0000 (16:03 +0100)]
We finish writing our test.
Gustavo Martin Morcuende [Sun, 4 Dec 2016 14:59:05 +0000 (15:59 +0100)]
Writing the asserts and the trigger for those asserts.
Gustavo Martin Morcuende [Sun, 4 Dec 2016 14:46:11 +0000 (15:46 +0100)]
First acceptance test
Use interfaces for representing the external world.
Gustavo Martin Morcuende [Sun, 4 Dec 2016 14:18:13 +0000 (15:18 +0100)]
Acceptance test, README (constraints)
Gustavo Martin Morcuende [Fri, 2 Dec 2016 22:44:05 +0000 (23:44 +0100)]
RxJava: using flatMap method
Gustavo Martin Morcuende [Fri, 2 Dec 2016 22:20:14 +0000 (23:20 +0100)]
Dealing with InterruptedException, the right way.
Gustavo Martin Morcuende [Fri, 2 Dec 2016 21:18:03 +0000 (22:18 +0100)]
Closing fd as it must be done in CustomHTTPClient
I feel ashame... :(
Gustavo Martin Morcuende [Fri, 2 Dec 2016 20:58:55 +0000 (21:58 +0100)]
Having fun with RxJava
Gustavo Martin Morcuende [Sun, 4 Dec 2016 22:09:17 +0000 (23:09 +0100)]
Fixing coverage in Clock.today()
My implementation solves the coverage issue (hopefully it is right)
Gustavo Martin Morcuende [Sun, 4 Dec 2016 20:36:27 +0000 (21:36 +0100)]
How to configure IDE Eclipse
Gustavo Martin Morcuende [Sun, 4 Dec 2016 20:35:31 +0000 (21:35 +0100)]
We end up writing our application based on the acceptance test
Gustavo Martin Morcuende [Sun, 4 Dec 2016 20:30:50 +0000 (21:30 +0100)]
PrintStatementeFeature requires the right values for clock.
Gustavo Martin Morcuende [Sun, 4 Dec 2016 20:21:43 +0000 (21:21 +0100)]
BIG WARNING: Clock.today() is not under test!!!!
Our tests do not fail even if we return null from there...
Gustavo Martin Morcuende [Sun, 4 Dec 2016 20:11:59 +0000 (21:11 +0100)]
Making StatementPrinter and StatementPrinterShould look better
Gustavo Martin Morcuende [Sun, 4 Dec 2016 20:09:46 +0000 (21:09 +0100)]
StatementPrinter, test for print method green
Gustavo Martin Morcuende [Sun, 4 Dec 2016 19:02:02 +0000 (20:02 +0100)]
StatementPrinterShould is failing for the right reasons.
Gustavo Martin Morcuende [Sun, 4 Dec 2016 18:49:14 +0000 (19:49 +0100)]
The acceptance test is failing because we need to implement the print method in StatementPrinter.
We always write first a test and then the implementation.
In this case we have to create the test called StatementPrinterShould and from
there we can create the implementation for the print method.
Gustavo Martin Morcuende [Sun, 4 Dec 2016 18:32:51 +0000 (19:32 +0100)]
Clock test is green.
Inline as much code as possible (getting ride of variables)
We isolate and control the randomness in our code.
No using spies, instead, we use private classes in our tests.
Gustavo Martin Morcuende [Sun, 4 Dec 2016 17:47:15 +0000 (18:47 +0100)]
Clock test working but we need to control the random part.
We need it in order to write tests that will work in any day.
Gustavo Martin Morcuende [Sun, 4 Dec 2016 17:36:34 +0000 (18:36 +0100)]
Renaming local variables in TransactionRepository
Gustavo Martin Morcuende [Sun, 4 Dec 2016 17:35:51 +0000 (18:35 +0100)]
Removing duplications from TransactionRepositoryShould
Gustavo Martin Morcuende [Sun, 4 Dec 2016 17:34:45 +0000 (18:34 +0100)]
Now we have a test for addWithdrawal
Gustavo Martin Morcuende [Sun, 4 Dec 2016 17:31:12 +0000 (18:31 +0100)]
It is only left a test for addWithdrawal
Gustavo Martin Morcuende [Sun, 4 Dec 2016 17:25:48 +0000 (18:25 +0100)]
Tests failing for the right reason
We need to keep implementing methods.
Gustavo Martin Morcuende [Sun, 4 Dec 2016 17:13:27 +0000 (18:13 +0100)]
Tests are failing for the right reasons
They throw UnsupportedOperationException because we need the implementations.
Gustavo Martin Morcuende [Sun, 4 Dec 2016 16:41:58 +0000 (17:41 +0100)]
We have a green test for AccountShould
But PrintStatementFeature is failing because the acceptance test is using
the real classes, it tells me what has not been implemented :)
Gustavo Martin Morcuende [Sun, 4 Dec 2016 16:33:11 +0000 (17:33 +0100)]
AccountShould is failing for the right reasons.
We can now implement the printStatement method.
Gustavo Martin Morcuende [Sun, 4 Dec 2016 16:21:38 +0000 (17:21 +0100)]
We have to test the printStatement method in Account
Gustavo Martin Morcuende [Sun, 4 Dec 2016 16:16:15 +0000 (17:16 +0100)]
Delegating the responsability of storing transactions.
TransactionRepository will store transactions.
Gustavo Martin Morcuende [Sun, 4 Dec 2016 15:57:30 +0000 (16:57 +0100)]
Creating test for Account.
Always write first your asserts.
Gustavo Martin Morcuende [Sun, 4 Dec 2016 15:19:08 +0000 (16:19 +0100)]
Now we have test expecting some result, it is now failing for the right reasons.
We are using the double loop of unit testing:
* First, start with an acceptance test.
* Second, once the acceptance test is failing for the right reason then you
go to the inner loop of TDD (the unit test) we can start unit testing our code.
Once we have all the classes under unit tests our accpetance test should go green.
Gustavo Martin Morcuende [Sun, 4 Dec 2016 15:18:39 +0000 (16:18 +0100)]
Test throws UnsupportedOperationException as expected.
You should configure your IDE for throwing UnsupportedOperationException
whenever it automatically creates a method. In this way, when running
our unit tests we are able to find out what is not yet implemented.
Gustavo Martin Morcuende [Sun, 4 Dec 2016 15:03:32 +0000 (16:03 +0100)]
We finish writing our test.
Gustavo Martin Morcuende [Sun, 4 Dec 2016 14:59:05 +0000 (15:59 +0100)]
Writing the asserts and the trigger for those asserts.
Gustavo Martin Morcuende [Sun, 4 Dec 2016 14:46:11 +0000 (15:46 +0100)]
First acceptance test
Use interfaces for representing the external world.
Gustavo Martin Morcuende [Sun, 4 Dec 2016 14:18:13 +0000 (15:18 +0100)]
Acceptance test, README (constraints)
Gustavo Martin Morcuende [Fri, 2 Dec 2016 22:44:05 +0000 (23:44 +0100)]
RxJava: using flatMap method
Gustavo Martin Morcuende [Fri, 2 Dec 2016 22:20:14 +0000 (23:20 +0100)]
Dealing with InterruptedException, the right way.
Gustavo Martin Morcuende [Fri, 2 Dec 2016 21:18:03 +0000 (22:18 +0100)]
Closing fd as it must be done in CustomHTTPClient
I feel ashame... :(
Gustavo Martin Morcuende [Fri, 2 Dec 2016 21:00:36 +0000 (22:00 +0100)]
Merge branch 'master' of https://github.com/gumartinm/JavaForFun
Gustavo Martin Morcuende [Fri, 2 Dec 2016 20:58:55 +0000 (21:58 +0100)]
Having fun with RxJava
Gustavo Martin Morcuende [Sun, 27 Nov 2016 17:43:42 +0000 (18:43 +0100)]
Outside in TDD
https://www.youtube.com/watch?v=XHnuMjah6ps
Gustavo Martin Morcuende [Sun, 27 Nov 2016 17:36:51 +0000 (18:36 +0100)]
We will add our exceptions to the enum.
Gustavo Martin Morcuende [Sun, 27 Nov 2016 17:27:34 +0000 (18:27 +0100)]
Testing IV
We are in position of testing exceptions like IV.
Exceptions will be added to enum and our algorithm we will keep working.
Gustavo Martin Morcuende [Sun, 27 Nov 2016 17:19:23 +0000 (18:19 +0100)]
Removing duplicated loop.
Two loops were doing the same (appending letters)
Gustavo Martin Morcuende [Sun, 27 Nov 2016 17:16:02 +0000 (18:16 +0100)]
Writing test for XXX requires a while loop
Duplication: there is two loops appending letters, we want to remove one because
both of them are doing the same.
Gustavo Martin Morcuende [Sun, 27 Nov 2016 17:10:18 +0000 (18:10 +0100)]
Removing duplications.
We need to map X and V to numbers. We achive it by means of an enum.
Gustavo Martin Morcuende [Sun, 27 Nov 2016 16:56:00 +0000 (17:56 +0100)]
Writing test for XVIII
We see duplications again :)
Gustavo Martin Morcuende [Sun, 27 Nov 2016 16:52:15 +0000 (17:52 +0100)]
Writing test for X
Gustavo Martin Morcuende [Sun, 27 Nov 2016 16:49:42 +0000 (17:49 +0100)]
Writing test for VII
Gustavo Martin Morcuende [Sun, 27 Nov 2016 16:46:06 +0000 (17:46 +0100)]
Testing another simple case, V
We skip IV because it is an exception.
Gustavo Martin Morcuende [Sun, 27 Nov 2016 16:44:34 +0000 (17:44 +0100)]
tripservice: link to youtube tutorial
Gustavo Martin Morcuende [Sun, 27 Nov 2016 16:35:11 +0000 (17:35 +0100)]
Generalize code.
From duplications we identify pattern and generalize our code.
Gustavo Martin Morcuende [Sun, 27 Nov 2016 16:30:33 +0000 (17:30 +0100)]
Again we write the simplest thing to make our test green
And we see duplications :)
Gustavo Martin Morcuende [Sun, 27 Nov 2016 16:25:09 +0000 (17:25 +0100)]
We always write the simplest thing to make our test green
Gustavo Martin Morcuende [Sun, 27 Nov 2016 16:18:57 +0000 (17:18 +0100)]
RomanNumeralGenerator, first test passing
Gustavo Martin Morcuende [Sun, 27 Nov 2016 16:15:56 +0000 (17:15 +0100)]
RomanNumeralGenerator, creating test (first) and class (second)
Gustavo Martin Morcuende [Sun, 27 Nov 2016 16:03:59 +0000 (17:03 +0100)]
romannumerals
Gustavo Martin Morcuende [Sun, 27 Nov 2016 15:52:24 +0000 (16:52 +0100)]
different projects for codurance
Gustavo Martin Morcuende [Sun, 27 Nov 2016 15:27:04 +0000 (16:27 +0100)]
new projects, tdd and sandomancuso
Gustavo Martin Morcuende [Sun, 27 Nov 2016 14:17:07 +0000 (15:17 +0100)]
README file
Gustavo Martin Morcuende [Sun, 27 Nov 2016 14:10:52 +0000 (15:10 +0100)]
TripService we can refactor as much as we want because everything is under test.
Creating validate method.
Gustavo Martin Morcuende [Sun, 27 Nov 2016 14:08:27 +0000 (15:08 +0100)]
Required dependency for @Inject
Gustavo Martin Morcuende [Sun, 27 Nov 2016 14:07:07 +0000 (15:07 +0100)]
TripServiceShould green
TripService is green again, we are using BDDMockito (which integrates nicely with //given //when //then comments)
and we can delete code from our TripServiceShould unit test
Gustavo Martin Morcuende [Sun, 27 Nov 2016 13:55:53 +0000 (14:55 +0100)]
return_friend_trips_when_users_are_friends fails
Now test is using my Mock but it keeps failing with a different error :)
Gustavo Martin Morcuende [Sun, 27 Nov 2016 13:46:55 +0000 (14:46 +0100)]
return_friend_trips_when_users_are_friends stops working
When a test fails we have a reason for refactoring our legacy code!!!
In this case the problema is related to using the static method of TripDAO
Gustavo Martin Morcuende [Sun, 27 Nov 2016 13:26:05 +0000 (14:26 +0100)]
TripDAO, always test before refactoring
We need a new method in order to be able to rewrite our legacy code.
At the very end this method will be the one used by our app.
The static method will dissapear after refactoring our whole app (what should be done carefully)
Gustavo Martin Morcuende [Fri, 25 Nov 2016 00:15:11 +0000 (01:15 +0100)]
Removing loggedInUser from Test.
Less variables makes our code more simple.
Gustavo Martin Morcuende [Fri, 25 Nov 2016 00:10:22 +0000 (01:10 +0100)]
Getting rid of getLoggedInUser() method
Gustavo Martin Morcuende [Fri, 25 Nov 2016 00:04:26 +0000 (01:04 +0100)]
MVC, Model should know nothing about View.
Service is in Model layer, it should not be dealing with sessions (View)
Gustavo Martin Morcuende [Thu, 24 Nov 2016 23:51:30 +0000 (00:51 +0100)]
TripService refactored
Gustavo Martin Morcuende [Thu, 24 Nov 2016 23:46:58 +0000 (00:46 +0100)]
Getting rid of variable makes code easier.
There could be performance issues, but if there are not problems this code is better.
Gustavo Martin Morcuende [Thu, 24 Nov 2016 23:46:10 +0000 (00:46 +0100)]
Using ternary operation
Gustavo Martin Morcuende [Thu, 24 Nov 2016 23:41:11 +0000 (00:41 +0100)]
Getting rid of variables in legacy code is great.
It enables us to reuse methods.
Once we take away as many variables as posible we can remake optimizations.
Gustavo Martin Morcuende [Thu, 24 Nov 2016 23:31:02 +0000 (00:31 +0100)]
Moving Guard Condition to the top