diff --git a/README.md b/README.md
index 9c54d970..e2832d37 100644
--- a/README.md
+++ b/README.md
@@ -12,16 +12,16 @@
## Exercises
-### Part One: The Test Driven Cycle (Red, Green, Refactor)
+### Part One: The Test Driven Development Cycle (Red, Green, Refactor)
-We will follow the best practices of TDD and we will create our tests first and write production code once we see the test fail. We will create a `Student` and a `StudentTest` class for a grades application, let's analyse the requirements for the `Student` class:
+We will follow the best practices of TDD, and we will create our tests first and write production code once we see the test fail. We will create a `Student` and a `StudentTest` class for a grades application, before you start let's analyse the requirements for the `Student` class:
- `id` should be a `long` number used to represent a "unique user" in our application.
- `name` is a `String` that holds the name of the student.
- `grades` is an `ArrayList` that contains a list of `Integer` numbers.
-1. Create a new branch called `part-one` and read carefully the next instructions.
-1. Create a `StudentTest.java` class file inside of `src/test/java` and remember to write the test before the actual production code. We will simulate the `C(reate) R(ead)` from the `CRUD` functionality in our grades application, you should be able to test and create the following requirements:
+1. Create a new branch called `students-tests` and read carefully the next instructions.
+1. Create a `StudentTest.java` class file inside of `src/test/java` (you might have to create these folders yourself) and remember to write the test before the actual production code. We will simulate the `C(reate) R(ead)` from the `CRUD` functionality in our grades application, you should be able to test and create the following requirements:
- The `Student` class should have a constructor that sets both the name and id property, it initializes the grades property as an empty ArrayList.
- The `Student` class should have the following methods:
@@ -36,19 +36,25 @@ We will follow the best practices of TDD and we will create our tests first and
public double getGradeAverage();
```
1. As always, commit and push all your changes once you're done.
-_At the end of the exercise you will ended up with a `Student.java` and a `StudentTest.java` class._
+_At the end of the exercise you will end up with a `Student.java` and a `StudentTest.java` class._
+
+#### Bonus
+
+- Go ahead and try to add the rest of the `CRUD` tests and functionality, write the methods for `updateGrade()` and `deleteGrade()` in the `Student` class.
### Part Two: Testing Legacy Code
-Once you finished the `Student.java` class.
+Once you are done with the `Student.java` class.
-1. Checkout to the `part-two` branch, there you will find a `Cohort.java` class inside the `src/main/java` folder, this class has already a lot of methods to calculate the cohort average grade and add a student. Let's go ahead and make sure there's sufficient tests for this class to be deploy to production:
+1. Checkout to the `cohorts-feature` branch, there you will find a `Cohort.java` class inside the `src/main/java` folder, this class has already a lot of methods to calculate the cohort average grade and add a student. Let's go ahead and make sure there's sufficient tests for this class to be deployed to production:
-1. Create a test for each of the following concerns and code any extra tests as needed.
- - A Cohort instance always have students before being used.
- - A Cohort instance can add a `Student` to the `List` of students.
- - A Cohort instance can get the list of students.
+1. Start by creating a new branch called: `cohorts-tests`.
+1. Then create a `CohortTest` class and build a test for each of the following requirements:
+ - A `Cohort` instance can add a `Student` to the `List` of students.
+ - A `Cohort` instance can get the current `List` of students.
+ - A `Cohort` instance can get the average, and it's being calculated correctly.
+1. Go back to the `StudentTest` class and refactor the code to avoid any repetition in the test cases, the use of the `@Before` annotation will be useful to achieve this, do the same with this new `CohortTest` class if you find any code repetition as well.
-### Bonus
+#### Bonus
-- Go ahead and try to add the rest of the `CRUD` tests and functionality, write the methods for `updateGrade()` and `deleteGrade()` in the `Student` class.
\ No newline at end of file
+- Follow the TDD cycle and create a new feature to find students by their ID like: `findStudentById(long id)` in the `Cohort` class, remember to create the tests first before any production code.
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 195435a0..32cc2565 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,18 +7,10 @@
junit-teststests1.0-SNAPSHOT
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
-
- 11
- 11
-
-
-
-
+
+ 11
+ 11
+
diff --git a/src/main/java/Cohort.java b/src/main/java/Cohort.java
new file mode 100644
index 00000000..4baa092f
--- /dev/null
+++ b/src/main/java/Cohort.java
@@ -0,0 +1,27 @@
+import java.util.ArrayList;
+import java.util.List;
+
+public class Cohort {
+
+ private List students;
+
+ public Cohort() {
+ this.students = new ArrayList<>();
+ }
+
+ public double getCohortAverage() {
+ double avg = 0;
+ for (Student student: this.getStudents()) {
+ avg += student.getGradeAverage();
+ }
+ return avg / this.getStudents().size();
+ }
+
+ public void addStudent(Student student){
+ students.add(student);
+ }
+
+ public List getStudents() {
+ return students;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/Student.java b/src/main/java/Student.java
new file mode 100644
index 00000000..507d664c
--- /dev/null
+++ b/src/main/java/Student.java
@@ -0,0 +1,38 @@
+import java.util.ArrayList;
+
+public class Student {
+
+ private long id;
+ private String name;
+ private ArrayList grades;
+
+ public Student(long id, String name) {
+ this.id = id;
+ this.name = name;
+ this.grades = new ArrayList<>();
+ }
+
+ public long getId() {
+ return this.id;
+ }
+
+ public String getName() {
+ return this.name;
+ }
+
+ public ArrayList getGrades() {
+ return this.grades;
+ }
+
+ public void addGrade(int grade) {
+ this.grades.add(grade);
+ }
+
+ public double getGradeAverage() {
+ double sum = 0;
+ for (int grade: this.grades) {
+ sum += grade;
+ }
+ return sum / this.grades.size() ;
+ }
+}
diff --git a/src/test/java/CohortTest.java b/src/test/java/CohortTest.java
new file mode 100644
index 00000000..d11b44eb
--- /dev/null
+++ b/src/test/java/CohortTest.java
@@ -0,0 +1,35 @@
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+public class CohortTest {
+ Cohort venus;
+ @Before
+ public void init() {
+ venus = new Cohort();
+ Student Cody = new Student(1, "Cody");
+ venus.addStudent(Cody);
+ Cody.addGrade(85);
+ Cody.addGrade(90);
+ Student DocRob = new Student(2, "DocRob");
+ venus.addStudent(DocRob);
+ DocRob.addGrade(88);
+ DocRob.addGrade(97);
+ }
+ @Test
+ public void testStudentAdd() {
+ assertEquals(2, venus.getStudents().size());
+ }
+
+ @Test
+ public void testGetCurrentList() {
+ assertNotNull(venus.getStudents());
+ }
+
+ @Test
+ public void testGetAverage() {
+ assertEquals(90.0,venus.getCohortAverage(),2);
+ }
+}
diff --git a/src/test/java/StudentTest.java b/src/test/java/StudentTest.java
new file mode 100644
index 00000000..a3cfb11f
--- /dev/null
+++ b/src/test/java/StudentTest.java
@@ -0,0 +1,41 @@
+import org.junit.Test;
+
+import java.util.ArrayList;
+
+import static org.junit.Assert.*;
+
+public class StudentTest {
+ @Test
+ public void testCreateStudent(){
+ Student fer = new Student(1L, "fer");
+ Student ryan = null;
+ assertNull(ryan);
+ assertNotNull(fer);
+ }
+
+ @Test
+ public void testStudentFields(){
+ Student fer = new Student(1L, "fer");
+ assertSame(1L, fer.getId());
+ assertSame("fer", fer.getName());
+ assertSame(0, fer.getGrades().size());
+ }
+
+
+ @Test
+ public void testAddGrade(){
+ Student fer = new Student(1L, "fer");
+ fer.addGrade(100);
+ assertSame(100, fer.getGrades().get(0));
+ fer.addGrade(80);
+ assertSame(80, fer.getGrades().get(1));
+ }
+
+ @Test
+ public void testAverageGrade(){
+ Student fer = new Student(1L, "fer");
+ fer.addGrade(100);
+ fer.addGrade(80);
+ assertEquals(90, fer.getGradeAverage(), 0);
+ }
+}
\ No newline at end of file