# 2023/05/15 lab1
# Course
```
package com.cctbcbank.demo.Lab1.model;
import java.util.UUID;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class Course {
private UUID id;
private String name;
private int price;
private CourseCategory category;
public void addCourse(Course c) {
category.addCourse(c);
}
public void removeCourse(UUID uuid) {
category.removeCourse(uuid);
}
public Course() {
super();
}
public Course(String name,int price) {
super();
this.name = name;
this.price = price;
}
}
```
# CourseCategory
```
package com.cctbcbank.demo.Lab1.model;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class CourseCategory {
private UUID id;
private String name;
private String detail;
private List<Course> courses = new ArrayList<>();
public void addCourse(Course c) {
courses.add(c);
}
public void removeCourse(UUID uuid) {
courses.remove(uuid);
}
public CourseCategory() {
super();
}
public CourseCategory(List<Course> courses) {
super();
this.courses = courses;
}
}
```
# CourseCategoryService
```
package com.cctbcbank.demo.Lab1.Service;
import java.util.List;
import java.util.UUID;
import com.cctbcbank.demo.Lab1.model.CourseCategory;
public interface CourseCategoryService {
List<CourseCategory> getAllCourseCategory();
CourseCategory addCourseCategory(String name, String detail);
void removeCourseCategory(UUID uuid);
CourseCategory modifyCourseCategory(UUID id, String name, String detail);
}
```
# CourseCategoryServiceJDKImplement
```
package com.cctbcbank.demo.Lab1.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import com.cctbcbank.demo.Lab1.model.CourseCategory;
public class CourseCategoryServiceJDKImplement implements CourseCategoryService {
private static CourseCategory courseCategory = new CourseCategory();
private List<CourseCategory> allCourseCategory = new ArrayList<>();
@Override
public List<CourseCategory> getAllCourseCategory() {
return allCourseCategory;
}
@Override
public CourseCategory addCourseCategory(String name, String detail) {
courseCategory = new CourseCategory();
courseCategory.setId(UUID.randomUUID());
courseCategory.setName(name);
courseCategory.setDetail(detail);
allCourseCategory.add(courseCategory);
return courseCategory;
}
@Override
public void removeCourseCategory(UUID id) {
int i = 0;
while (i < allCourseCategory.size()) {
if (allCourseCategory.get(i).getId() == id) {
allCourseCategory.set(i,null);
break;
} else {
i++;
System.out.println("null");
break;
}
}
}
@Override
public CourseCategory modifyCourseCategory(UUID id, String name, String detail) {
if (courseCategory.getId() == id) {
courseCategory.setName(name);
courseCategory.setDetail(detail);
} else {
System.out.println("null");
}
return courseCategory;
}
}
```
# CourseService
```
package com.cctbcbank.demo.Lab1.Service;
import java.util.List;
import java.util.UUID;
import com.cctbcbank.demo.Lab1.model.Course;
public interface CourseService {
List<Course> getAllCourseService();
Course addCourseService(String name, int price);
void removeCourseService(UUID uuid);
Course modifyCourseService(UUID id, String name, int price);
}
```
# CourseServiceJDKImplement
```
package com.cctbcbank.demo.Lab1.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import com.cctbcbank.demo.Lab1.model.Course;
import com.cctbcbank.demo.Lab1.model.CourseCategory;
public class CourseServiceJDKImplement implements CourseService {
public static Course course = null;
private List<Course> allCourses = new ArrayList<>();
private static CourseCategory courseCategory = new CourseCategory();
@Override
public List<Course> getAllCourseService() {
return allCourses;
}
@Override
public Course addCourseService(String name, int price) {
course = new Course();
course.setId(UUID.randomUUID());
course.setName(name);
course.setPrice(price);
allCourses.add(course);
courseCategory = new CourseCategory();
courseCategory.addCourse(course);
return course;
}
@Override
public void removeCourseService(UUID id) {
int i = 0;
while (i < allCourses.size()) {
if (allCourses.get(i).getId() == id) {
allCourses.set(i, null);
courseCategory.removeCourse(id);
break;
} else {
i++;
System.out.println("null");
break;
}
}
}
@Override
public Course modifyCourseService(UUID id, String name, int price) {
if (course.getId() == id) {
course.setName(name);
course.setPrice(price);
} else {
System.out.println("null");
}
return course;
}
}
```
# CourseCategoryTest
```
package com.cctbcbank.demo.Step1;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import com.cctbcbank.demo.Lab1.model.Course;
import com.cctbcbank.demo.Lab1.model.CourseCategory;
public class CourseCategoryTest {
public static Course course = null;
public static CourseCategory courseCategory = null;
@Test
public void CourseCategoryNullTest() {
CourseCategory c1 = new CourseCategory();
Assertions.assertNotNull(c1);
}
// 判斷有無生成
@Test
public void addCourseNullTest() {
courseCategory = new CourseCategory();
courseCategory.addCourse(course);
// System.out.println(courseCategory.getCourses().get(0));
Assertions.assertNull(courseCategory.getCourses().get(0));
}
// 判斷有無生成
@Test
public void removeCourseTest() {
courseCategory = new CourseCategory();
courseCategory.removeCourse(UUID.randomUUID());
System.out.println(courseCategory.getCourses());
Assertions.assertEquals(0,courseCategory.getCourses().size());
}
@Test
public void CourseCategoryGetterSetterTest() {
courseCategory = new CourseCategory();
courseCategory.setName("xyz");
Assertions.assertEquals("xyz", courseCategory.getName());
}
}
```
# CourseTest
```
package com.cctbcbank.demo.Step1;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import com.cctbcbank.demo.Lab1.model.Course;
import com.cctbcbank.demo.Lab1.model.CourseCategory;
public class CourseTest {
private CourseCategory category;
//private List<Course> courses = new ArrayList<>();
private Course course = null;
@Test
public void CourseNullTest() {
course = new Course("Java",5000);
Assertions.assertNotNull(course);
}
@Test
public void addCourseTest() {
category = new CourseCategory();
course = new Course("Java",5000);
category.addCourse(course);
Assertions.assertNotNull(category);
}
@Test
public void removeCourseTest() {
category = new CourseCategory();
course = new Course("abc",1000);
category.addCourse(course);
category.removeCourse(category.getId());
Assertions.assertNull(category.getId());
}
@Test
public void CourseGetterSetterTest() {
course = new Course("xyz",1000);
Assertions.assertEquals("xyz",course.getName());
}
}
```
# CourseCategoryServiceTest
```
package com.cctbcbank.demo.Step2;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import com.cctbcbank.demo.Lab1.Service.CourseCategoryServiceJDKImplement;
import com.cctbcbank.demo.Lab1.model.CourseCategory;
public class CourseCategoryServiceTest {
private CourseCategory courseCategory = new CourseCategory();
private List<CourseCategory> allCourseCategory = new ArrayList<>();
// 服務生成時是否為空
@Test
public void CourseCategoryServiceNullTest() {
CourseCategoryServiceJDKImplement service = new CourseCategoryServiceJDKImplement();
// System.out.println(service.getAllCourseCategory().size());
// 使用size()判斷是否有生成並且為空
Assertions.assertEquals(0, service.getAllCourseCategory().size());
}
// 取得所有課程類別
@Test
public void getAllCourseCategoryTest() {
CourseCategoryServiceJDKImplement service = new CourseCategoryServiceJDKImplement();
service.addCourseCategory("Java","Java is good");
Assertions.assertNotNull(service.getAllCourseCategory());
}
// 新增一筆課程類別
@Test
public void addOneCourseCategoryTest() {
CourseCategoryServiceJDKImplement service = new CourseCategoryServiceJDKImplement();
String Name = "Java";
String Detail = "Java is good";
System.out.println("新增課程類別 "+Name);
courseCategory = service.addCourseCategory(Name, Detail);
System.out.println("新增結果 "+courseCategory.getName()+"\r\n");
Assertions.assertEquals(Name, courseCategory.getName());
}
// 新增多筆課程類別
@Test
public void addManyCourseCategoryTest() {
CourseCategoryServiceJDKImplement service = new CourseCategoryServiceJDKImplement();
String Name = "Java";
String Detail = "Java is good";
String Name2 = "Java2";
String Detail2 = "Java is good2";
String Name3 = "Java3";
String Detail3 = "Java is good3";
System.out.println("新增課程類別");
courseCategory = service.addCourseCategory(Name, Detail);
allCourseCategory.add(courseCategory);
courseCategory = service.addCourseCategory(Name2, Detail2);
allCourseCategory.add(courseCategory);
courseCategory = service.addCourseCategory(Name3, Detail3);
allCourseCategory.add(courseCategory);
System.out.println("新增第一筆 "+allCourseCategory.get(0).getName());
System.out.println("新增第二筆 "+allCourseCategory.get(1).getName());
System.out.println("新增第三筆 "+allCourseCategory.get(2).getName()+"\r\n");
Assertions.assertEquals(Name, allCourseCategory.get(0).getName());
Assertions.assertEquals(Name2, allCourseCategory.get(1).getName());
Assertions.assertEquals(Name3, allCourseCategory.get(2).getName());
}
// 刪除課程類別
@Test
public void removeCourseCategoryUUIDNotExistTest() {
CourseCategoryServiceJDKImplement service = new CourseCategoryServiceJDKImplement();
courseCategory = service.addCourseCategory("Java05", "Java is good!!!");
courseCategory = service.addCourseCategory("java06", "Java is good!!");
allCourseCategory = service.getAllCourseCategory();
System.out.println("刪除課程類別 "+allCourseCategory.get(0).getName());
service.removeCourseCategory(allCourseCategory.get(0).getId());
System.out.println("刪除結果 "+allCourseCategory.get(0)+"\r\n");
Assertions.assertEquals(null,allCourseCategory.get(0));
}
// 刪除課程類別(uuid 不存在
@Test
public void removeCourseCategoryUUIDExistTest() {
CourseCategoryServiceJDKImplement service = new CourseCategoryServiceJDKImplement();
courseCategory = service.addCourseCategory("Java", "Java is good");
courseCategory = service.addCourseCategory("Java2", "Java is good2");
allCourseCategory = service.getAllCourseCategory();
// 刪除不存在的id
UUID id = UUID.randomUUID();
System.out.println("刪除不存在的id "+id);
service.removeCourseCategory(id);
System.out.println();
Assertions.assertEquals("Java",allCourseCategory.get(0).getName());
Assertions.assertEquals("Java2",allCourseCategory.get(1).getName());
}
// 修改課程類別
@Test
public void modifyCourseCategoryTest() {
CourseCategoryServiceJDKImplement service = new CourseCategoryServiceJDKImplement();
courseCategory = service.addCourseCategory("Java", "Java is good");
System.out.println("修改前課程類別名稱 "+courseCategory.getName());
service.modifyCourseCategory(courseCategory.getId(), "C#", "C# is good");
System.out.println("修改後課程類別名稱(Java->C#) "+courseCategory.getName()+"\r\n");
Assertions.assertEquals("C#", courseCategory.getName());
// 修改不存在的id
UUID id = UUID.randomUUID();
System.out.println("修改不存在的id "+id);
service.modifyCourseCategory(id, "C#", "C# is good");
System.out.println();
}
}
```
# CourseServiceTest
```
package com.cctbcbank.demo.Step2;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.Test;
import com.cctbcbank.demo.Lab1.Service.CourseServiceJDKImplement;
import com.cctbcbank.demo.Lab1.model.Course;
public class CourseServiceTest {
private Course course = new Course();
private List<Course> allCourses = new ArrayList<>();
// 服務生成時是否為空
@Test
public void CourseServiceNullTest() {
CourseServiceJDKImplement service = new CourseServiceJDKImplement();
// System.out.println(service.getAllCourseService().size());
// 使用size()判斷是否有生成並且為空
Assertions.assertEquals(0, service.getAllCourseService().size());
}
// 取得所有課程
@Test
public void getAllCourseServiceTest() {
CourseServiceJDKImplement service = new CourseServiceJDKImplement();
course = service.addCourseService("Java1", 10000);
Assertions.assertNotNull(service.getAllCourseService());
}
// 新增一筆課程
@Test
public void addOneCourseServiceTest() {
course = new Course();
CourseServiceJDKImplement service = new CourseServiceJDKImplement();
String Name = "Java2";
int Price = 20000;
System.out.println("新增一筆課程 "+Name);
course = service.addCourseService(Name, Price);
System.out.println("新增結果 "+course.getName()+"\r\n");
Assertions.assertEquals(Name, course.getName());
}
// 新增多筆課程
@Test
public void addManyCourseServiceTest() {
course = new Course();
CourseServiceJDKImplement service = new CourseServiceJDKImplement();
String Name = "Java3";
int Price = 30000;
String Name2 = "Java4";
int Price2 = 40000;
String Name3 = "Java5";
int Price3 = 50000;
System.out.println("新增多筆課程");
course = service.addCourseService(Name, Price);
course = service.addCourseService(Name2, Price2);
course = service.addCourseService(Name3, Price3);
allCourses=service.getAllCourseService();
System.out.println("新增第一筆 "+allCourses.get(0).getName());
System.out.println("新增第二筆 "+allCourses.get(1).getName());
System.out.println("新增第三筆 "+allCourses.get(2).getName()+"\r\n");
Assertions.assertEquals(Name, allCourses.get(0).getName());
Assertions.assertEquals(Name2, allCourses.get(1).getName());
Assertions.assertEquals(Name3, allCourses.get(2).getName());
}
// 刪除課程 uuid存在
@Test
public void removeCourseServiceUUIDExistTest() {
CourseServiceJDKImplement service = new CourseServiceJDKImplement();
course = service.addCourseService("Java6",60000);
course = service.addCourseService("Java7",70000);
allCourses=service.getAllCourseService();
System.out.println("刪除課程 "+allCourses.get(0).getName());
service.removeCourseService(allCourses.get(0).getId());
System.out.println("刪除結果 "+allCourses.get(0)+"\r\n");
Assertions.assertEquals(null,allCourses.get(0));
}
// 刪除課程 uuid不存在
@Test
public void removeCourseServiceUUIDNotExistTest() {
CourseServiceJDKImplement service = new CourseServiceJDKImplement();
course = service.addCourseService("Java8",80000);
course = service.addCourseService("Java9",90000);
allCourses=service.getAllCourseService();
UUID id = UUID.randomUUID();
System.out.println("\r\n刪除不存在課程 "+id);
service.removeCourseService(id);
Assertions.assertEquals("Java8",allCourses.get(0).getName());
Assertions.assertEquals("Java9",allCourses.get(1).getName());
}
// 修改課程 uuid存在
@Test
public void modifyCourseServiceTest() {
CourseServiceJDKImplement service = new CourseServiceJDKImplement();
course = service.addCourseService("Java10",100000);
System.out.println("修改前課程名稱 "+course.getName());
service.modifyCourseService(course.getId(), "C#", 12000);
System.out.println("修改後課程名稱(Java10->C#) "+ course.getName());
Assertions.assertEquals("C#", course.getName());
// 修改不存在的uuid
UUID id = UUID.randomUUID();
System.out.println("\r\n修改不存在的id "+id);
service.modifyCourseService(id, "C#", 12000);
}
}
```
# AddCourseToCategoryTest
```
package com.cctbcbank.demo.Step3;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import com.cctbcbank.demo.Lab1.model.Course;
import com.cctbcbank.demo.Lab1.model.CourseCategory;
public class AddCourseToCategoryTest {
public static Course course = null;
public static CourseCategory courseCategory = new CourseCategory();
private List<Course> courses = new ArrayList<>();
// 課程加到類別
@Test
public void addCourseTest() {
Course course = new Course();
UUID id = UUID.randomUUID();
course.setId(id);
course.setName("ABC1");
course.setPrice(1000);
CourseCategory courseCategory = new CourseCategory();
courseCategory.addCourse(course);
List<Course> courses = new ArrayList<>();
courses.add(course);
Assertions.assertEquals("ABC1",courseCategory.getCourses().get(0).getName());
}
// 課程加到另一個類別,把課程從原本類別刪除(沒完成
@Test
public void removeCourseTest() {
Course course = new Course();
UUID id = UUID.randomUUID();
course.setId(id);
course.setName("ABC1");
course.setPrice(1000);
CourseCategory courseCategory = new CourseCategory();
courseCategory.addCourse(course);
CourseCategory courseCategory2 = new CourseCategory();
courseCategory2.addCourse(course);
List<Course> courses = new ArrayList<>();
courses.add(course);
courseCategory.removeCourse(id);
Assertions.assertEquals(0,courseCategory.getCourses().get(0).getName());
}
}
```
# CourseServiceFactoryTest
```
package com.cctbcbank.demo.Step4;
import com.cctbcbank.demo.Lab1.Service.CourseService;
public class CourseServiceFactoryTest {
CourseServiceFactoryTest factory = new CourseServiceFactoryTest();
public synchronized static CourseService getServiceTest() {
return null;
}
}
```