diff --git a/build.gradle b/build.gradle index a9c8edbbf..b4267f41e 100644 --- a/build.gradle +++ b/build.gradle @@ -21,59 +21,54 @@ repositories { mavenCentral() } -dependencies {//todo: 안쓰는 의존성이나 deprecated된 의존성 제거 +dependencies { + // Web implementation 'org.springframework.boot:spring-boot-starter-web' + + // DataBase + implementation 'com.mysql:mysql-connector-j' + implementation 'org.springframework.boot:spring-boot-starter-data-redis' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' - implementation 'com.mysql:mysql-connector-j:8.2.0' - implementation 'org.hibernate:hibernate-core:6.3.0.CR1' - implementation 'org.springframework.data:spring-data-redis:3.1.2' + implementation 'org.flywaydb:flyway-core' + implementation 'org.flywaydb:flyway-mysql' + + // QueryDSL + implementation 'io.github.openfeign.querydsl:querydsl-jpa:6.11' + annotationProcessor 'io.github.openfeign.querydsl:querydsl-apt:6.11:jpa' + annotationProcessor 'jakarta.persistence:jakarta.persistence-api' + annotationProcessor 'jakarta.annotation:jakarta.annotation-api' + + // Security + implementation 'org.springframework.security:spring-security-config' + implementation 'org.springframework.security:spring-security-web' implementation 'io.jsonwebtoken:jjwt:0.9.1' - implementation 'org.springframework.security:spring-security-core:6.1.2' - implementation 'org.springframework.security:spring-security-config:6.1.2' - implementation 'org.springframework.security:spring-security-web:6.1.2' - implementation 'io.lettuce:lettuce-core:6.2.5.RELEASE' - implementation 'javax.xml.bind:jaxb-api:2.4.0-b180830.0359' - implementation 'com.amazonaws:aws-java-sdk-s3:1.12.470' - implementation 'org.hibernate.validator:hibernate-validator:8.0.1.Final' - implementation 'jakarta.annotation:jakarta.annotation-api:2.1.1' - implementation 'org.apache.commons:commons-lang3:3.12.0' + runtimeOnly 'javax.xml.bind:jaxb-api:2.4.0-b180830.0359' // for jjwt + + // Monitoring implementation 'org.springframework.boot:spring-boot-starter-actuator' implementation 'io.micrometer:micrometer-registry-prometheus' - implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta' implementation 'io.sentry:sentry-spring-boot-starter-jakarta:7.5.0' // Lombok - compileOnly 'org.projectlombok:lombok:1.18.26' + compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' // Test testImplementation 'org.springframework.boot:spring-boot-starter-test' - testImplementation 'org.mockito:mockito-core:3.3.3' - testImplementation 'io.rest-assured:rest-assured:5.4.0' - - // Testcontainers testImplementation 'org.testcontainers:testcontainers' testImplementation 'org.testcontainers:junit-jupiter' testImplementation 'org.testcontainers:mysql' - annotationProcessor( - 'com.querydsl:querydsl-apt:5.0.0:jakarta', - 'jakarta.persistence:jakarta.persistence-api:3.1.0', - 'jakarta.annotation:jakarta.annotation-api:2.1.1' - ) - - implementation 'org.flywaydb:flyway-core' - implementation 'org.flywaydb:flyway-mysql' + // Etc + implementation 'org.hibernate.validator:hibernate-validator' + implementation 'com.amazonaws:aws-java-sdk-s3:1.12.782' } -tasks.named('test') { +tasks.named('test', Test) { useJUnitPlatform() } +// To include QueryDLS classes in compile classpath sourceSets { main.java.srcDirs += ['build/generated/sources/annotationProcessor/java/main'] } - -compileJava { - options.annotationProcessorGeneratedSourcesDirectory = file('build/generated/sources/annotationProcessor/java/main') -} diff --git a/src/main/generated/com/example/solidconnection/application/domain/QApplication.java b/src/main/generated/com/example/solidconnection/application/domain/QApplication.java deleted file mode 100644 index 764baa7cf..000000000 --- a/src/main/generated/com/example/solidconnection/application/domain/QApplication.java +++ /dev/null @@ -1,76 +0,0 @@ -package com.example.solidconnection.application.domain; - -import static com.querydsl.core.types.PathMetadataFactory.*; - -import com.querydsl.core.types.dsl.*; - -import com.querydsl.core.types.PathMetadata; -import javax.annotation.processing.Generated; -import com.querydsl.core.types.Path; -import com.querydsl.core.types.dsl.PathInits; - - -/** - * QApplication is a Querydsl query type for Application - */ -@Generated("com.querydsl.codegen.DefaultEntitySerializer") -public class QApplication extends EntityPathBase { - - private static final long serialVersionUID = -122324166L; - - private static final PathInits INITS = PathInits.DIRECT2; - - public static final QApplication application = new QApplication("application"); - - public final com.example.solidconnection.university.domain.QUniversityInfoForApply firstChoiceUniversity; - - public final QGpa gpa; - - public final NumberPath id = createNumber("id", Long.class); - - public final BooleanPath isDelete = createBoolean("isDelete"); - - public final QLanguageTest languageTest; - - public final StringPath nicknameForApply = createString("nicknameForApply"); - - public final com.example.solidconnection.university.domain.QUniversityInfoForApply secondChoiceUniversity; - - public final com.example.solidconnection.siteuser.domain.QSiteUser siteUser; - - public final StringPath term = createString("term"); - - public final com.example.solidconnection.university.domain.QUniversityInfoForApply thirdChoiceUniversity; - - public final NumberPath updateCount = createNumber("updateCount", Integer.class); - - public final EnumPath verifyStatus = createEnum("verifyStatus", com.example.solidconnection.type.VerifyStatus.class); - - public QApplication(String variable) { - this(Application.class, forVariable(variable), INITS); - } - - public QApplication(Path path) { - this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); - } - - public QApplication(PathMetadata metadata) { - this(metadata, PathInits.getFor(metadata, INITS)); - } - - public QApplication(PathMetadata metadata, PathInits inits) { - this(Application.class, metadata, inits); - } - - public QApplication(Class type, PathMetadata metadata, PathInits inits) { - super(type, metadata, inits); - this.firstChoiceUniversity = inits.isInitialized("firstChoiceUniversity") ? new com.example.solidconnection.university.domain.QUniversityInfoForApply(forProperty("firstChoiceUniversity"), inits.get("firstChoiceUniversity")) : null; - this.gpa = inits.isInitialized("gpa") ? new QGpa(forProperty("gpa")) : null; - this.languageTest = inits.isInitialized("languageTest") ? new QLanguageTest(forProperty("languageTest")) : null; - this.secondChoiceUniversity = inits.isInitialized("secondChoiceUniversity") ? new com.example.solidconnection.university.domain.QUniversityInfoForApply(forProperty("secondChoiceUniversity"), inits.get("secondChoiceUniversity")) : null; - this.siteUser = inits.isInitialized("siteUser") ? new com.example.solidconnection.siteuser.domain.QSiteUser(forProperty("siteUser")) : null; - this.thirdChoiceUniversity = inits.isInitialized("thirdChoiceUniversity") ? new com.example.solidconnection.university.domain.QUniversityInfoForApply(forProperty("thirdChoiceUniversity"), inits.get("thirdChoiceUniversity")) : null; - } - -} - diff --git a/src/main/generated/com/example/solidconnection/application/domain/QGpa.java b/src/main/generated/com/example/solidconnection/application/domain/QGpa.java deleted file mode 100644 index e6f55fd97..000000000 --- a/src/main/generated/com/example/solidconnection/application/domain/QGpa.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.example.solidconnection.application.domain; - -import static com.querydsl.core.types.PathMetadataFactory.*; - -import com.querydsl.core.types.dsl.*; - -import com.querydsl.core.types.PathMetadata; -import javax.annotation.processing.Generated; -import com.querydsl.core.types.Path; - - -/** - * QGpa is a Querydsl query type for Gpa - */ -@Generated("com.querydsl.codegen.DefaultEmbeddableSerializer") -public class QGpa extends BeanPath { - - private static final long serialVersionUID = -51081086L; - - public static final QGpa gpa1 = new QGpa("gpa1"); - - public final NumberPath gpa = createNumber("gpa", Double.class); - - public final NumberPath gpaCriteria = createNumber("gpaCriteria", Double.class); - - public final StringPath gpaReportUrl = createString("gpaReportUrl"); - - public QGpa(String variable) { - super(Gpa.class, forVariable(variable)); - } - - public QGpa(Path path) { - super(path.getType(), path.getMetadata()); - } - - public QGpa(PathMetadata metadata) { - super(Gpa.class, metadata); - } - -} - diff --git a/src/main/generated/com/example/solidconnection/application/domain/QLanguageTest.java b/src/main/generated/com/example/solidconnection/application/domain/QLanguageTest.java deleted file mode 100644 index d22d113d2..000000000 --- a/src/main/generated/com/example/solidconnection/application/domain/QLanguageTest.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.example.solidconnection.application.domain; - -import static com.querydsl.core.types.PathMetadataFactory.*; - -import com.querydsl.core.types.dsl.*; - -import com.querydsl.core.types.PathMetadata; -import javax.annotation.processing.Generated; -import com.querydsl.core.types.Path; - - -/** - * QLanguageTest is a Querydsl query type for LanguageTest - */ -@Generated("com.querydsl.codegen.DefaultEmbeddableSerializer") -public class QLanguageTest extends BeanPath { - - private static final long serialVersionUID = 1768826720L; - - public static final QLanguageTest languageTest = new QLanguageTest("languageTest"); - - public final StringPath languageTestReportUrl = createString("languageTestReportUrl"); - - public final StringPath languageTestScore = createString("languageTestScore"); - - public final EnumPath languageTestType = createEnum("languageTestType", com.example.solidconnection.type.LanguageTestType.class); - - public QLanguageTest(String variable) { - super(LanguageTest.class, forVariable(variable)); - } - - public QLanguageTest(Path path) { - super(path.getType(), path.getMetadata()); - } - - public QLanguageTest(PathMetadata metadata) { - super(LanguageTest.class, metadata); - } - -} - diff --git a/src/main/generated/com/example/solidconnection/entity/QCountry.java b/src/main/generated/com/example/solidconnection/entity/QCountry.java deleted file mode 100644 index ab42f8004..000000000 --- a/src/main/generated/com/example/solidconnection/entity/QCountry.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.example.solidconnection.entity; - -import static com.querydsl.core.types.PathMetadataFactory.*; - -import com.querydsl.core.types.dsl.*; - -import com.querydsl.core.types.PathMetadata; -import javax.annotation.processing.Generated; -import com.querydsl.core.types.Path; -import com.querydsl.core.types.dsl.PathInits; - - -/** - * QCountry is a Querydsl query type for Country - */ -@Generated("com.querydsl.codegen.DefaultEntitySerializer") -public class QCountry extends EntityPathBase { - - private static final long serialVersionUID = -2001953983L; - - private static final PathInits INITS = PathInits.DIRECT2; - - public static final QCountry country = new QCountry("country"); - - public final StringPath code = createString("code"); - - public final StringPath koreanName = createString("koreanName"); - - public final QRegion region; - - public QCountry(String variable) { - this(Country.class, forVariable(variable), INITS); - } - - public QCountry(Path path) { - this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); - } - - public QCountry(PathMetadata metadata) { - this(metadata, PathInits.getFor(metadata, INITS)); - } - - public QCountry(PathMetadata metadata, PathInits inits) { - this(Country.class, metadata, inits); - } - - public QCountry(Class type, PathMetadata metadata, PathInits inits) { - super(type, metadata, inits); - this.region = inits.isInitialized("region") ? new QRegion(forProperty("region")) : null; - } - -} - diff --git a/src/main/generated/com/example/solidconnection/entity/QInterestedCountry.java b/src/main/generated/com/example/solidconnection/entity/QInterestedCountry.java deleted file mode 100644 index 9c8b3c6d0..000000000 --- a/src/main/generated/com/example/solidconnection/entity/QInterestedCountry.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.example.solidconnection.entity; - -import static com.querydsl.core.types.PathMetadataFactory.*; - -import com.querydsl.core.types.dsl.*; - -import com.querydsl.core.types.PathMetadata; -import javax.annotation.processing.Generated; -import com.querydsl.core.types.Path; -import com.querydsl.core.types.dsl.PathInits; - - -/** - * QInterestedCountry is a Querydsl query type for InterestedCountry - */ -@Generated("com.querydsl.codegen.DefaultEntitySerializer") -public class QInterestedCountry extends EntityPathBase { - - private static final long serialVersionUID = 1105130488L; - - private static final PathInits INITS = PathInits.DIRECT2; - - public static final QInterestedCountry interestedCountry = new QInterestedCountry("interestedCountry"); - - public final QCountry country; - - public final NumberPath id = createNumber("id", Long.class); - - public final com.example.solidconnection.siteuser.domain.QSiteUser siteUser; - - public QInterestedCountry(String variable) { - this(InterestedCountry.class, forVariable(variable), INITS); - } - - public QInterestedCountry(Path path) { - this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); - } - - public QInterestedCountry(PathMetadata metadata) { - this(metadata, PathInits.getFor(metadata, INITS)); - } - - public QInterestedCountry(PathMetadata metadata, PathInits inits) { - this(InterestedCountry.class, metadata, inits); - } - - public QInterestedCountry(Class type, PathMetadata metadata, PathInits inits) { - super(type, metadata, inits); - this.country = inits.isInitialized("country") ? new QCountry(forProperty("country"), inits.get("country")) : null; - this.siteUser = inits.isInitialized("siteUser") ? new com.example.solidconnection.siteuser.domain.QSiteUser(forProperty("siteUser")) : null; - } - -} - diff --git a/src/main/generated/com/example/solidconnection/entity/QInterestedRegion.java b/src/main/generated/com/example/solidconnection/entity/QInterestedRegion.java deleted file mode 100644 index b60554f01..000000000 --- a/src/main/generated/com/example/solidconnection/entity/QInterestedRegion.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.example.solidconnection.entity; - -import static com.querydsl.core.types.PathMetadataFactory.*; - -import com.querydsl.core.types.dsl.*; - -import com.querydsl.core.types.PathMetadata; -import javax.annotation.processing.Generated; -import com.querydsl.core.types.Path; -import com.querydsl.core.types.dsl.PathInits; - - -/** - * QInterestedRegion is a Querydsl query type for InterestedRegion - */ -@Generated("com.querydsl.codegen.DefaultEntitySerializer") -public class QInterestedRegion extends EntityPathBase { - - private static final long serialVersionUID = -1345685934L; - - private static final PathInits INITS = PathInits.DIRECT2; - - public static final QInterestedRegion interestedRegion = new QInterestedRegion("interestedRegion"); - - public final NumberPath id = createNumber("id", Long.class); - - public final QRegion region; - - public final com.example.solidconnection.siteuser.domain.QSiteUser siteUser; - - public QInterestedRegion(String variable) { - this(InterestedRegion.class, forVariable(variable), INITS); - } - - public QInterestedRegion(Path path) { - this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); - } - - public QInterestedRegion(PathMetadata metadata) { - this(metadata, PathInits.getFor(metadata, INITS)); - } - - public QInterestedRegion(PathMetadata metadata, PathInits inits) { - this(InterestedRegion.class, metadata, inits); - } - - public QInterestedRegion(Class type, PathMetadata metadata, PathInits inits) { - super(type, metadata, inits); - this.region = inits.isInitialized("region") ? new QRegion(forProperty("region")) : null; - this.siteUser = inits.isInitialized("siteUser") ? new com.example.solidconnection.siteuser.domain.QSiteUser(forProperty("siteUser")) : null; - } - -} - diff --git a/src/main/generated/com/example/solidconnection/entity/QRegion.java b/src/main/generated/com/example/solidconnection/entity/QRegion.java deleted file mode 100644 index 23bfeafb4..000000000 --- a/src/main/generated/com/example/solidconnection/entity/QRegion.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.example.solidconnection.entity; - -import static com.querydsl.core.types.PathMetadataFactory.*; - -import com.querydsl.core.types.dsl.*; - -import com.querydsl.core.types.PathMetadata; -import javax.annotation.processing.Generated; -import com.querydsl.core.types.Path; - - -/** - * QRegion is a Querydsl query type for Region - */ -@Generated("com.querydsl.codegen.DefaultEntitySerializer") -public class QRegion extends EntityPathBase { - - private static final long serialVersionUID = 1047937513L; - - public static final QRegion region = new QRegion("region"); - - public final StringPath code = createString("code"); - - public final StringPath koreanName = createString("koreanName"); - - public QRegion(String variable) { - super(Region.class, forVariable(variable)); - } - - public QRegion(Path path) { - super(path.getType(), path.getMetadata()); - } - - public QRegion(PathMetadata metadata) { - super(Region.class, metadata); - } - -} - diff --git a/src/main/generated/com/example/solidconnection/siteuser/domain/QSiteUser.java b/src/main/generated/com/example/solidconnection/siteuser/domain/QSiteUser.java deleted file mode 100644 index ac4af0986..000000000 --- a/src/main/generated/com/example/solidconnection/siteuser/domain/QSiteUser.java +++ /dev/null @@ -1,70 +0,0 @@ -package com.example.solidconnection.siteuser.domain; - -import static com.querydsl.core.types.PathMetadataFactory.*; - -import com.querydsl.core.types.dsl.*; - -import com.querydsl.core.types.PathMetadata; -import javax.annotation.processing.Generated; -import com.querydsl.core.types.Path; -import com.querydsl.core.types.dsl.PathInits; - - -/** - * QSiteUser is a Querydsl query type for SiteUser - */ -@Generated("com.querydsl.codegen.DefaultEntitySerializer") -public class QSiteUser extends EntityPathBase { - - private static final long serialVersionUID = 1080517302L; - - public static final QSiteUser siteUser = new QSiteUser("siteUser"); - - public final EnumPath authType = createEnum("authType", AuthType.class); - - public final StringPath birth = createString("birth"); - - public final ListPath commentList = this.createList("commentList", com.example.solidconnection.community.comment.domain.Comment.class, com.example.solidconnection.community.comment.domain.QComment.class, PathInits.DIRECT2); - - public final StringPath email = createString("email"); - - public final EnumPath gender = createEnum("gender", com.example.solidconnection.type.Gender.class); - - public final ListPath gpaScoreList = this.createList("gpaScoreList", com.example.solidconnection.score.domain.GpaScore.class, com.example.solidconnection.score.domain.QGpaScore.class, PathInits.DIRECT2); - - public final NumberPath id = createNumber("id", Long.class); - - public final ListPath languageTestScoreList = this.createList("languageTestScoreList", com.example.solidconnection.score.domain.LanguageTestScore.class, com.example.solidconnection.score.domain.QLanguageTestScore.class, PathInits.DIRECT2); - - public final StringPath nickname = createString("nickname"); - - public final DateTimePath nicknameModifiedAt = createDateTime("nicknameModifiedAt", java.time.LocalDateTime.class); - - public final StringPath password = createString("password"); - - public final ListPath postLikeList = this.createList("postLikeList", com.example.solidconnection.community.post.domain.PostLike.class, com.example.solidconnection.community.post.domain.QPostLike.class, PathInits.DIRECT2); - - public final ListPath postList = this.createList("postList", com.example.solidconnection.community.post.domain.Post.class, com.example.solidconnection.community.post.domain.QPost.class, PathInits.DIRECT2); - - public final EnumPath preparationStage = createEnum("preparationStage", com.example.solidconnection.type.PreparationStatus.class); - - public final StringPath profileImageUrl = createString("profileImageUrl"); - - public final DatePath quitedAt = createDate("quitedAt", java.time.LocalDate.class); - - public final EnumPath role = createEnum("role", com.example.solidconnection.type.Role.class); - - public QSiteUser(String variable) { - super(SiteUser.class, forVariable(variable)); - } - - public QSiteUser(Path path) { - super(path.getType(), path.getMetadata()); - } - - public QSiteUser(PathMetadata metadata) { - super(SiteUser.class, metadata); - } - -} - diff --git a/src/main/generated/com/example/solidconnection/university/domain/QLanguageRequirement.java b/src/main/generated/com/example/solidconnection/university/domain/QLanguageRequirement.java deleted file mode 100644 index b5b49ddeb..000000000 --- a/src/main/generated/com/example/solidconnection/university/domain/QLanguageRequirement.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.example.solidconnection.university.domain; - -import static com.querydsl.core.types.PathMetadataFactory.*; - -import com.querydsl.core.types.dsl.*; - -import com.querydsl.core.types.PathMetadata; -import javax.annotation.processing.Generated; -import com.querydsl.core.types.Path; -import com.querydsl.core.types.dsl.PathInits; - - -/** - * QLanguageRequirement is a Querydsl query type for LanguageRequirement - */ -@Generated("com.querydsl.codegen.DefaultEntitySerializer") -public class QLanguageRequirement extends EntityPathBase { - - private static final long serialVersionUID = 443667787L; - - private static final PathInits INITS = PathInits.DIRECT2; - - public static final QLanguageRequirement languageRequirement = new QLanguageRequirement("languageRequirement"); - - public final NumberPath id = createNumber("id", Long.class); - - public final EnumPath languageTestType = createEnum("languageTestType", com.example.solidconnection.type.LanguageTestType.class); - - public final StringPath minScore = createString("minScore"); - - public final QUniversityInfoForApply universityInfoForApply; - - public QLanguageRequirement(String variable) { - this(LanguageRequirement.class, forVariable(variable), INITS); - } - - public QLanguageRequirement(Path path) { - this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); - } - - public QLanguageRequirement(PathMetadata metadata) { - this(metadata, PathInits.getFor(metadata, INITS)); - } - - public QLanguageRequirement(PathMetadata metadata, PathInits inits) { - this(LanguageRequirement.class, metadata, inits); - } - - public QLanguageRequirement(Class type, PathMetadata metadata, PathInits inits) { - super(type, metadata, inits); - this.universityInfoForApply = inits.isInitialized("universityInfoForApply") ? new QUniversityInfoForApply(forProperty("universityInfoForApply"), inits.get("universityInfoForApply")) : null; - } - -} - diff --git a/src/main/generated/com/example/solidconnection/university/domain/QLikedUniversity.java b/src/main/generated/com/example/solidconnection/university/domain/QLikedUniversity.java deleted file mode 100644 index e82fc8c65..000000000 --- a/src/main/generated/com/example/solidconnection/university/domain/QLikedUniversity.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.example.solidconnection.university.domain; - -import static com.querydsl.core.types.PathMetadataFactory.*; - -import com.querydsl.core.types.dsl.*; - -import com.querydsl.core.types.PathMetadata; -import javax.annotation.processing.Generated; -import com.querydsl.core.types.Path; -import com.querydsl.core.types.dsl.PathInits; - - -/** - * QLikedUniversity is a Querydsl query type for LikedUniversity - */ -@Generated("com.querydsl.codegen.DefaultEntitySerializer") -public class QLikedUniversity extends EntityPathBase { - - private static final long serialVersionUID = 142590363L; - - private static final PathInits INITS = PathInits.DIRECT2; - - public static final QLikedUniversity likedUniversity = new QLikedUniversity("likedUniversity"); - - public final NumberPath id = createNumber("id", Long.class); - - public final com.example.solidconnection.siteuser.domain.QSiteUser siteUser; - - public final QUniversityInfoForApply universityInfoForApply; - - public QLikedUniversity(String variable) { - this(LikedUniversity.class, forVariable(variable), INITS); - } - - public QLikedUniversity(Path path) { - this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); - } - - public QLikedUniversity(PathMetadata metadata) { - this(metadata, PathInits.getFor(metadata, INITS)); - } - - public QLikedUniversity(PathMetadata metadata, PathInits inits) { - this(LikedUniversity.class, metadata, inits); - } - - public QLikedUniversity(Class type, PathMetadata metadata, PathInits inits) { - super(type, metadata, inits); - this.siteUser = inits.isInitialized("siteUser") ? new com.example.solidconnection.siteuser.domain.QSiteUser(forProperty("siteUser")) : null; - this.universityInfoForApply = inits.isInitialized("universityInfoForApply") ? new QUniversityInfoForApply(forProperty("universityInfoForApply"), inits.get("universityInfoForApply")) : null; - } - -} - diff --git a/src/main/generated/com/example/solidconnection/university/domain/QUniversity.java b/src/main/generated/com/example/solidconnection/university/domain/QUniversity.java deleted file mode 100644 index fee1f2ca4..000000000 --- a/src/main/generated/com/example/solidconnection/university/domain/QUniversity.java +++ /dev/null @@ -1,72 +0,0 @@ -package com.example.solidconnection.university.domain; - -import static com.querydsl.core.types.PathMetadataFactory.*; - -import com.querydsl.core.types.dsl.*; - -import com.querydsl.core.types.PathMetadata; -import javax.annotation.processing.Generated; -import com.querydsl.core.types.Path; -import com.querydsl.core.types.dsl.PathInits; - - -/** - * QUniversity is a Querydsl query type for University - */ -@Generated("com.querydsl.codegen.DefaultEntitySerializer") -public class QUniversity extends EntityPathBase { - - private static final long serialVersionUID = 1195314958L; - - private static final PathInits INITS = PathInits.DIRECT2; - - public static final QUniversity university = new QUniversity("university"); - - public final StringPath accommodationUrl = createString("accommodationUrl"); - - public final StringPath backgroundImageUrl = createString("backgroundImageUrl"); - - public final com.example.solidconnection.entity.QCountry country; - - public final StringPath detailsForLocal = createString("detailsForLocal"); - - public final StringPath englishCourseUrl = createString("englishCourseUrl"); - - public final StringPath englishName = createString("englishName"); - - public final StringPath formatName = createString("formatName"); - - public final StringPath homepageUrl = createString("homepageUrl"); - - public final NumberPath id = createNumber("id", Long.class); - - public final StringPath koreanName = createString("koreanName"); - - public final StringPath logoImageUrl = createString("logoImageUrl"); - - public final com.example.solidconnection.entity.QRegion region; - - public QUniversity(String variable) { - this(University.class, forVariable(variable), INITS); - } - - public QUniversity(Path path) { - this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); - } - - public QUniversity(PathMetadata metadata) { - this(metadata, PathInits.getFor(metadata, INITS)); - } - - public QUniversity(PathMetadata metadata, PathInits inits) { - this(University.class, metadata, inits); - } - - public QUniversity(Class type, PathMetadata metadata, PathInits inits) { - super(type, metadata, inits); - this.country = inits.isInitialized("country") ? new com.example.solidconnection.entity.QCountry(forProperty("country"), inits.get("country")) : null; - this.region = inits.isInitialized("region") ? new com.example.solidconnection.entity.QRegion(forProperty("region")) : null; - } - -} - diff --git a/src/main/generated/com/example/solidconnection/university/domain/QUniversityInfoForApply.java b/src/main/generated/com/example/solidconnection/university/domain/QUniversityInfoForApply.java deleted file mode 100644 index 4b4c55546..000000000 --- a/src/main/generated/com/example/solidconnection/university/domain/QUniversityInfoForApply.java +++ /dev/null @@ -1,81 +0,0 @@ -package com.example.solidconnection.university.domain; - -import static com.querydsl.core.types.PathMetadataFactory.*; - -import com.querydsl.core.types.dsl.*; - -import com.querydsl.core.types.PathMetadata; -import javax.annotation.processing.Generated; -import com.querydsl.core.types.Path; -import com.querydsl.core.types.dsl.PathInits; - - -/** - * QUniversityInfoForApply is a Querydsl query type for UniversityInfoForApply - */ -@Generated("com.querydsl.codegen.DefaultEntitySerializer") -public class QUniversityInfoForApply extends EntityPathBase { - - private static final long serialVersionUID = 31331617L; - - private static final PathInits INITS = PathInits.DIRECT2; - - public static final QUniversityInfoForApply universityInfoForApply = new QUniversityInfoForApply("universityInfoForApply"); - - public final StringPath details = createString("details"); - - public final StringPath detailsForAccommodation = createString("detailsForAccommodation"); - - public final StringPath detailsForApply = createString("detailsForApply"); - - public final StringPath detailsForEnglishCourse = createString("detailsForEnglishCourse"); - - public final StringPath detailsForLanguage = createString("detailsForLanguage"); - - public final StringPath detailsForMajor = createString("detailsForMajor"); - - public final StringPath gpaRequirement = createString("gpaRequirement"); - - public final StringPath gpaRequirementCriteria = createString("gpaRequirementCriteria"); - - public final NumberPath id = createNumber("id", Long.class); - - public final StringPath koreanName = createString("koreanName"); - - public final SetPath languageRequirements = this.createSet("languageRequirements", LanguageRequirement.class, QLanguageRequirement.class, PathInits.DIRECT2); - - public final EnumPath semesterAvailableForDispatch = createEnum("semesterAvailableForDispatch", com.example.solidconnection.type.SemesterAvailableForDispatch.class); - - public final StringPath semesterRequirement = createString("semesterRequirement"); - - public final NumberPath studentCapacity = createNumber("studentCapacity", Integer.class); - - public final StringPath term = createString("term"); - - public final EnumPath tuitionFeeType = createEnum("tuitionFeeType", com.example.solidconnection.type.TuitionFeeType.class); - - public final QUniversity university; - - public QUniversityInfoForApply(String variable) { - this(UniversityInfoForApply.class, forVariable(variable), INITS); - } - - public QUniversityInfoForApply(Path path) { - this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); - } - - public QUniversityInfoForApply(PathMetadata metadata) { - this(metadata, PathInits.getFor(metadata, INITS)); - } - - public QUniversityInfoForApply(PathMetadata metadata, PathInits inits) { - this(UniversityInfoForApply.class, metadata, inits); - } - - public QUniversityInfoForApply(Class type, PathMetadata metadata, PathInits inits) { - super(type, metadata, inits); - this.university = inits.isInitialized("university") ? new QUniversity(forProperty("university"), inits.get("university")) : null; - } - -} - diff --git a/src/main/java/com/example/solidconnection/admin/controller/AdminScoreController.java b/src/main/java/com/example/solidconnection/admin/controller/AdminScoreController.java index ca0692936..47bac37e1 100644 --- a/src/main/java/com/example/solidconnection/admin/controller/AdminScoreController.java +++ b/src/main/java/com/example/solidconnection/admin/controller/AdminScoreController.java @@ -10,17 +10,13 @@ import com.example.solidconnection.admin.service.AdminGpaScoreService; import com.example.solidconnection.admin.service.AdminLanguageTestScoreService; import com.example.solidconnection.custom.response.PageResponse; -import com.example.solidconnection.util.PagingUtils; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Page; -import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; -import org.springframework.data.web.PageableDefault; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.ModelAttribute; -import org.springframework.web.bind.annotation.PatchMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -35,15 +31,15 @@ public class AdminScoreController { private final AdminGpaScoreService adminGpaScoreService; private final AdminLanguageTestScoreService adminLanguageTestScoreService; - // todo: 추후 커스텀 페이지 객체 & argumentResolver를 적용 필요 @GetMapping("/gpas") public ResponseEntity> searchGpaScores( @Valid @ModelAttribute ScoreSearchCondition scoreSearchCondition, - @PageableDefault(page = 1) Pageable pageable + Pageable pageable ) { - PagingUtils.validatePage(pageable.getPageNumber(), pageable.getPageSize()); - Pageable internalPageable = PageRequest.of(pageable.getPageNumber() - 1, pageable.getPageSize()); - Page page = adminGpaScoreService.searchGpaScores(scoreSearchCondition, internalPageable); + Page page = adminGpaScoreService.searchGpaScores( + scoreSearchCondition, + pageable + ); return ResponseEntity.ok(PageResponse.of(page)); } @@ -56,15 +52,15 @@ public ResponseEntity updateGpaScore( return ResponseEntity.ok(response); } - // todo: 추후 커스텀 페이지 객체 & argumentResolver를 적용 필요 @GetMapping("/language-tests") public ResponseEntity> searchLanguageTestScores( @Valid @ModelAttribute ScoreSearchCondition scoreSearchCondition, - @PageableDefault(page = 1) Pageable pageable + Pageable pageable ) { - PagingUtils.validatePage(pageable.getPageNumber(), pageable.getPageSize()); - Pageable internalPageable = PageRequest.of(pageable.getPageNumber() - 1, pageable.getPageSize()); - Page page = adminLanguageTestScoreService.searchLanguageTestScores(scoreSearchCondition, internalPageable); + Page page = adminLanguageTestScoreService.searchLanguageTestScores( + scoreSearchCondition, + pageable + ); return ResponseEntity.ok(PageResponse.of(page)); } diff --git a/src/main/java/com/example/solidconnection/auth/dto/SignUpRequest.java b/src/main/java/com/example/solidconnection/auth/dto/SignUpRequest.java index 43f8e6caf..9bf92a295 100644 --- a/src/main/java/com/example/solidconnection/auth/dto/SignUpRequest.java +++ b/src/main/java/com/example/solidconnection/auth/dto/SignUpRequest.java @@ -2,10 +2,8 @@ import com.example.solidconnection.siteuser.domain.AuthType; import com.example.solidconnection.siteuser.domain.SiteUser; -import com.example.solidconnection.type.Gender; import com.example.solidconnection.type.PreparationStatus; import com.example.solidconnection.type.Role; -import com.fasterxml.jackson.annotation.JsonFormat; import jakarta.validation.constraints.NotBlank; import java.util.List; @@ -16,23 +14,17 @@ public record SignUpRequest( List interestedCountries, PreparationStatus preparationStatus, String profileImageUrl, - Gender gender, @NotBlank(message = "닉네임을 입력해주세요.") - String nickname, - - @JsonFormat(pattern = "yyyy-MM-dd") - String birth) { + String nickname) { public SiteUser toOAuthSiteUser(String email, AuthType authType) { return new SiteUser( email, this.nickname, this.profileImageUrl, - this.birth, this.preparationStatus, Role.MENTEE, - this.gender, authType ); } @@ -42,10 +34,8 @@ public SiteUser toEmailSiteUser(String email, String encodedPassword) { email, this.nickname, this.profileImageUrl, - this.birth, this.preparationStatus, Role.MENTEE, - this.gender, AuthType.EMAIL, encodedPassword ); diff --git a/src/main/java/com/example/solidconnection/config/web/WebMvcConfig.java b/src/main/java/com/example/solidconnection/config/web/WebMvcConfig.java index 10e468f56..6d16694cc 100644 --- a/src/main/java/com/example/solidconnection/config/web/WebMvcConfig.java +++ b/src/main/java/com/example/solidconnection/config/web/WebMvcConfig.java @@ -1,7 +1,7 @@ package com.example.solidconnection.config.web; - import com.example.solidconnection.custom.resolver.AuthorizedUserResolver; +import com.example.solidconnection.custom.resolver.CustomPageableHandlerMethodArgumentResolver; import com.example.solidconnection.custom.resolver.ExpiredTokenResolver; import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Configuration; @@ -16,12 +16,14 @@ public class WebMvcConfig implements WebMvcConfigurer { private final AuthorizedUserResolver authorizedUserResolver; private final ExpiredTokenResolver expiredTokenResolver; + private final CustomPageableHandlerMethodArgumentResolver customPageableHandlerMethodArgumentResolver; @Override public void addArgumentResolvers(List resolvers) { resolvers.addAll(List.of( authorizedUserResolver, - expiredTokenResolver + expiredTokenResolver, + customPageableHandlerMethodArgumentResolver )); } } diff --git a/src/main/java/com/example/solidconnection/custom/exception/ErrorCode.java b/src/main/java/com/example/solidconnection/custom/exception/ErrorCode.java index 4b581f79c..1a4e46b72 100644 --- a/src/main/java/com/example/solidconnection/custom/exception/ErrorCode.java +++ b/src/main/java/com/example/solidconnection/custom/exception/ErrorCode.java @@ -96,10 +96,6 @@ public enum ErrorCode { USER_DO_NOT_HAVE_GPA(HttpStatus.BAD_REQUEST.value(), "해당 유저의 학점을 찾을 수 없음"), REJECTED_REASON_REQUIRED(HttpStatus.BAD_REQUEST.value(), "거절 사유가 필요합니다."), - // page - INVALID_PAGE(HttpStatus.BAD_REQUEST.value(), "페이지 번호는 1 이상 50 이하만 가능합니다."), - INVALID_SIZE(HttpStatus.BAD_REQUEST.value(), "페이지 크기는 1 이상 50 이하만 가능합니다."), - // general JSON_PARSING_FAILED(HttpStatus.BAD_REQUEST.value(), "JSON 파싱을 할 수 없습니다."), JWT_EXCEPTION(HttpStatus.BAD_REQUEST.value(), "JWT 토큰을 처리할 수 없습니다."), diff --git a/src/main/java/com/example/solidconnection/custom/resolver/CustomPageableHandlerMethodArgumentResolver.java b/src/main/java/com/example/solidconnection/custom/resolver/CustomPageableHandlerMethodArgumentResolver.java new file mode 100644 index 000000000..418c6867f --- /dev/null +++ b/src/main/java/com/example/solidconnection/custom/resolver/CustomPageableHandlerMethodArgumentResolver.java @@ -0,0 +1,19 @@ +package com.example.solidconnection.custom.resolver; + +import org.springframework.data.domain.PageRequest; +import org.springframework.data.web.PageableHandlerMethodArgumentResolver; +import org.springframework.stereotype.Component; + +@Component +public class CustomPageableHandlerMethodArgumentResolver extends PageableHandlerMethodArgumentResolver { + + private static final int DEFAULT_PAGE = 0; + private static final int MAX_SIZE = 50; + private static final int DEFAULT_SIZE = 10; + + public CustomPageableHandlerMethodArgumentResolver() { + setMaxPageSize(MAX_SIZE); + setOneIndexedParameters(true); + setFallbackPageable(PageRequest.of(DEFAULT_PAGE, DEFAULT_SIZE)); + } +} diff --git a/src/main/java/com/example/solidconnection/siteuser/domain/SiteUser.java b/src/main/java/com/example/solidconnection/siteuser/domain/SiteUser.java index b1cf6c1cc..21dfbcc13 100644 --- a/src/main/java/com/example/solidconnection/siteuser/domain/SiteUser.java +++ b/src/main/java/com/example/solidconnection/siteuser/domain/SiteUser.java @@ -5,7 +5,6 @@ import com.example.solidconnection.community.post.domain.PostLike; import com.example.solidconnection.score.domain.GpaScore; import com.example.solidconnection.score.domain.LanguageTestScore; -import com.example.solidconnection.type.Gender; import com.example.solidconnection.type.PreparationStatus; import com.example.solidconnection.type.Role; import jakarta.persistence.CascadeType; @@ -61,9 +60,6 @@ public class SiteUser { @Column(length = 500) private String profileImageUrl; - @Column(nullable = false, length = 20) - private String birth; - @Column(nullable = false) @Enumerated(EnumType.STRING) private PreparationStatus preparationStage; @@ -72,10 +68,6 @@ public class SiteUser { @Enumerated(EnumType.STRING) private Role role; - @Column(nullable = false) - @Enumerated(EnumType.STRING) - private Gender gender; - @Setter private LocalDateTime nicknameModifiedAt; @@ -104,17 +96,13 @@ public SiteUser( String email, String nickname, String profileImageUrl, - String birth, PreparationStatus preparationStage, - Role role, - Gender gender) { + Role role) { this.email = email; this.nickname = nickname; this.profileImageUrl = profileImageUrl; - this.birth = birth; this.preparationStage = preparationStage; this.role = role; - this.gender = gender; this.authType = AuthType.KAKAO; } @@ -122,18 +110,14 @@ public SiteUser( String email, String nickname, String profileImageUrl, - String birth, PreparationStatus preparationStage, Role role, - Gender gender, AuthType authType) { this.email = email; this.nickname = nickname; this.profileImageUrl = profileImageUrl; - this.birth = birth; this.preparationStage = preparationStage; this.role = role; - this.gender = gender; this.authType = authType; } @@ -142,19 +126,15 @@ public SiteUser( String email, String nickname, String profileImageUrl, - String birth, PreparationStatus preparationStage, Role role, - Gender gender, AuthType authType, String password) { this.email = email; this.nickname = nickname; this.profileImageUrl = profileImageUrl; - this.birth = birth; this.preparationStage = preparationStage; this.role = role; - this.gender = gender; this.authType = authType; this.password = password; } diff --git a/src/main/java/com/example/solidconnection/siteuser/dto/MyPageResponse.java b/src/main/java/com/example/solidconnection/siteuser/dto/MyPageResponse.java index 9af5e6b2d..981866632 100644 --- a/src/main/java/com/example/solidconnection/siteuser/dto/MyPageResponse.java +++ b/src/main/java/com/example/solidconnection/siteuser/dto/MyPageResponse.java @@ -9,7 +9,6 @@ public record MyPageResponse( String profileImageUrl, Role role, AuthType authType, - String birth, String email, int likedPostCount, int likedMentorCount, @@ -21,7 +20,6 @@ public static MyPageResponse of(SiteUser siteUser, int likedUniversityCount) { siteUser.getProfileImageUrl(), siteUser.getRole(), siteUser.getAuthType(), - siteUser.getBirth(), siteUser.getEmail(), 0, // TODO: 커뮤니티 기능 생기면 업데이트 필요 0, // TODO: 멘토 기능 생기면 업데이트 필요 diff --git a/src/main/java/com/example/solidconnection/type/Gender.java b/src/main/java/com/example/solidconnection/type/Gender.java deleted file mode 100644 index 92a78814b..000000000 --- a/src/main/java/com/example/solidconnection/type/Gender.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.example.solidconnection.type; - -public enum Gender { - MALE, FEMALE, PREFER_NOT_TO_SAY -} diff --git a/src/main/java/com/example/solidconnection/util/PagingUtils.java b/src/main/java/com/example/solidconnection/util/PagingUtils.java deleted file mode 100644 index 5b4547410..000000000 --- a/src/main/java/com/example/solidconnection/util/PagingUtils.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.example.solidconnection.util; - -import com.example.solidconnection.custom.exception.CustomException; - -import static com.example.solidconnection.custom.exception.ErrorCode.INVALID_PAGE; -import static com.example.solidconnection.custom.exception.ErrorCode.INVALID_SIZE; - -public class PagingUtils { - - private static final int MIN_PAGE = 1; - private static final int MIN_SIZE = 1; - private static final int MAX_SIZE = 50; - private static final int MAX_PAGE = 50; - - private PagingUtils() { - } - - public static void validatePage(int page, int size) { - if (page < MIN_PAGE || page > MAX_PAGE) { - throw new CustomException(INVALID_PAGE); - } - if (size < MIN_SIZE || size > MAX_SIZE) { - throw new CustomException(INVALID_SIZE); - } - } -} diff --git a/src/main/resources/data.sql b/src/main/resources/data.sql index 5ae08770d..b1beb524b 100644 --- a/src/main/resources/data.sql +++ b/src/main/resources/data.sql @@ -41,9 +41,9 @@ VALUES ('BN', '브루나이', 'ASIA'), ('MY', '말레이시아', 'ASIA'), ('RU', '러시아', 'EUROPE'); -INSERT INTO site_user (birth, email, nickname, profile_image_url, gender, preparation_stage, role, password, auth_type) -VALUES ('1999-01-01', 'test@test.email', 'yonso','https://github.com/nayonsoso.png', - 'FEMALE', 'CONSIDERING', 'MENTEE', +INSERT INTO site_user (email, nickname, profile_image_url, preparation_stage, role, password, auth_type) +VALUES ('test@test.email', 'yonso', 'https://github.com/nayonsoso.png', + 'CONSIDERING', 'MENTEE', '$2a$10$psmwlxPfqWnIlq9JrlQJkuXr1XtjRNsyVOgcTWYZub5jFfn0TML76', 'EMAIL'); -- 12341234 INSERT INTO university(id, country_code, region_code, english_name, format_name, korean_name, diff --git a/src/main/resources/db/migration/V11__remove_siteuser_birth_and_gender.sql b/src/main/resources/db/migration/V11__remove_siteuser_birth_and_gender.sql new file mode 100644 index 000000000..20fdf7496 --- /dev/null +++ b/src/main/resources/db/migration/V11__remove_siteuser_birth_and_gender.sql @@ -0,0 +1,3 @@ +ALTER TABLE site_user + DROP COLUMN gender, + DROP COLUMN birth; diff --git a/src/main/resources/secret b/src/main/resources/secret index 42ed07a23..661dc50f2 160000 --- a/src/main/resources/secret +++ b/src/main/resources/secret @@ -1 +1 @@ -Subproject commit 42ed07a23ed2c4947923b57723ca8bfd71b14ca0 +Subproject commit 661dc50f2915b20525a2a00b2b7f6473775f3dc1 diff --git a/src/test/java/com/example/solidconnection/admin/service/AdminGpaScoreServiceTest.java b/src/test/java/com/example/solidconnection/admin/service/AdminGpaScoreServiceTest.java index a7d4e91e9..add4115ef 100644 --- a/src/test/java/com/example/solidconnection/admin/service/AdminGpaScoreServiceTest.java +++ b/src/test/java/com/example/solidconnection/admin/service/AdminGpaScoreServiceTest.java @@ -11,7 +11,6 @@ import com.example.solidconnection.siteuser.domain.SiteUser; import com.example.solidconnection.siteuser.repository.SiteUserRepository; import com.example.solidconnection.support.integration.BaseIntegrationTest; -import com.example.solidconnection.type.Gender; import com.example.solidconnection.type.PreparationStatus; import com.example.solidconnection.type.Role; import com.example.solidconnection.type.VerifyStatus; @@ -215,10 +214,8 @@ private SiteUser createSiteUser(int index, String nickname) { "test" + index + " @example.com", nickname, "profileImageUrl", - "1999-01-01", PreparationStatus.CONSIDERING, - Role.MENTEE, - Gender.MALE + Role.MENTEE ); return siteUserRepository.save(siteUser); } diff --git a/src/test/java/com/example/solidconnection/admin/service/AdminLanguageTestScoreServiceTest.java b/src/test/java/com/example/solidconnection/admin/service/AdminLanguageTestScoreServiceTest.java index 8882108b9..a3d00457e 100644 --- a/src/test/java/com/example/solidconnection/admin/service/AdminLanguageTestScoreServiceTest.java +++ b/src/test/java/com/example/solidconnection/admin/service/AdminLanguageTestScoreServiceTest.java @@ -11,7 +11,6 @@ import com.example.solidconnection.siteuser.domain.SiteUser; import com.example.solidconnection.siteuser.repository.SiteUserRepository; import com.example.solidconnection.support.integration.BaseIntegrationTest; -import com.example.solidconnection.type.Gender; import com.example.solidconnection.type.PreparationStatus; import com.example.solidconnection.type.Role; import com.example.solidconnection.type.VerifyStatus; @@ -225,10 +224,8 @@ private SiteUser createSiteUser(int index, String nickname) { "test" + index + " @example.com", nickname, "profileImageUrl", - "1999-01-01", PreparationStatus.CONSIDERING, - Role.MENTEE, - Gender.MALE + Role.MENTEE ); return siteUserRepository.save(siteUser); } diff --git a/src/test/java/com/example/solidconnection/auth/service/AuthTokenProviderTest.java b/src/test/java/com/example/solidconnection/auth/service/AuthTokenProviderTest.java index f5616973f..57a9ea789 100644 --- a/src/test/java/com/example/solidconnection/auth/service/AuthTokenProviderTest.java +++ b/src/test/java/com/example/solidconnection/auth/service/AuthTokenProviderTest.java @@ -5,7 +5,6 @@ import com.example.solidconnection.siteuser.domain.SiteUser; import com.example.solidconnection.siteuser.repository.SiteUserRepository; import com.example.solidconnection.support.TestContainerSpringBootTest; -import com.example.solidconnection.type.Gender; import com.example.solidconnection.type.PreparationStatus; import com.example.solidconnection.type.Role; import com.example.solidconnection.util.JwtUtils; @@ -28,7 +27,7 @@ class AuthTokenProviderTest { @Autowired private AuthTokenProvider authTokenProvider; - + @Autowired private SiteUserRepository siteUserRepository; @@ -37,10 +36,10 @@ class AuthTokenProviderTest { @Autowired private JwtProperties jwtProperties; - + private SiteUser siteUser; private String subject; - + @BeforeEach void setUp() { siteUser = createSiteUser(); @@ -50,7 +49,7 @@ void setUp() { @Nested class 액세스_토큰을_제공한다 { - + @Test void SiteUser_로_액세스_토큰을_생성한다() { // when @@ -74,10 +73,10 @@ class 액세스_토큰을_제공한다 { assertThat(actualSubject).isEqualTo(subject); } } - + @Nested class 리프레시_토큰을_제공한다 { - + @Test void SiteUser_로_리프레시_토큰을_생성하고_저장한다() { // when @@ -177,10 +176,8 @@ private SiteUser createSiteUser() { "test@example.com", "nickname", "profileImageUrl", - "1999-01-01", PreparationStatus.CONSIDERING, - Role.MENTEE, - Gender.MALE + Role.MENTEE ); return siteUserRepository.save(siteUser); } diff --git a/src/test/java/com/example/solidconnection/auth/service/EmailSignInServiceTest.java b/src/test/java/com/example/solidconnection/auth/service/EmailSignInServiceTest.java index e9663f5df..5a32ef362 100644 --- a/src/test/java/com/example/solidconnection/auth/service/EmailSignInServiceTest.java +++ b/src/test/java/com/example/solidconnection/auth/service/EmailSignInServiceTest.java @@ -8,7 +8,6 @@ import com.example.solidconnection.siteuser.domain.SiteUser; import com.example.solidconnection.siteuser.repository.SiteUserRepository; import com.example.solidconnection.support.TestContainerSpringBootTest; -import com.example.solidconnection.type.Gender; import com.example.solidconnection.type.PreparationStatus; import com.example.solidconnection.type.Role; import org.assertj.core.api.Assertions; @@ -88,10 +87,8 @@ private SiteUser createSiteUser(String email, String rawPassword) { email, "nickname", "profileImageUrl", - "1999-01-01", PreparationStatus.CONSIDERING, Role.MENTEE, - Gender.MALE, AuthType.EMAIL, encodedPassword ); diff --git a/src/test/java/com/example/solidconnection/auth/service/SignInServiceTest.java b/src/test/java/com/example/solidconnection/auth/service/SignInServiceTest.java index b80c4ca5d..6136bbee2 100644 --- a/src/test/java/com/example/solidconnection/auth/service/SignInServiceTest.java +++ b/src/test/java/com/example/solidconnection/auth/service/SignInServiceTest.java @@ -5,7 +5,6 @@ import com.example.solidconnection.siteuser.domain.SiteUser; import com.example.solidconnection.siteuser.repository.SiteUserRepository; import com.example.solidconnection.support.TestContainerSpringBootTest; -import com.example.solidconnection.type.Gender; import com.example.solidconnection.type.PreparationStatus; import com.example.solidconnection.type.Role; import com.example.solidconnection.util.JwtUtils; @@ -79,10 +78,8 @@ private SiteUser createSiteUser() { "test@example.com", "nickname", "profileImageUrl", - "1999-01-01", PreparationStatus.CONSIDERING, - Role.MENTEE, - Gender.MALE + Role.MENTEE ); } } diff --git a/src/test/java/com/example/solidconnection/concurrency/PostLikeCountConcurrencyTest.java b/src/test/java/com/example/solidconnection/concurrency/PostLikeCountConcurrencyTest.java index 52b9f24f0..fdcf0ec8d 100644 --- a/src/test/java/com/example/solidconnection/concurrency/PostLikeCountConcurrencyTest.java +++ b/src/test/java/com/example/solidconnection/concurrency/PostLikeCountConcurrencyTest.java @@ -8,7 +8,6 @@ import com.example.solidconnection.siteuser.domain.SiteUser; import com.example.solidconnection.siteuser.repository.SiteUserRepository; import com.example.solidconnection.support.TestContainerSpringBootTest; -import com.example.solidconnection.type.Gender; import com.example.solidconnection.type.PostCategory; import com.example.solidconnection.type.PreparationStatus; import com.example.solidconnection.type.Role; @@ -64,10 +63,8 @@ private SiteUser createSiteUser() { "test@example.com", "nickname", "profileImageUrl", - "1999-01-01", PreparationStatus.CONSIDERING, - Role.MENTEE, - Gender.MALE + Role.MENTEE ); } diff --git a/src/test/java/com/example/solidconnection/concurrency/PostViewCountConcurrencyTest.java b/src/test/java/com/example/solidconnection/concurrency/PostViewCountConcurrencyTest.java index 2cb6eaa27..beeb8b046 100644 --- a/src/test/java/com/example/solidconnection/concurrency/PostViewCountConcurrencyTest.java +++ b/src/test/java/com/example/solidconnection/concurrency/PostViewCountConcurrencyTest.java @@ -8,7 +8,6 @@ import com.example.solidconnection.siteuser.domain.SiteUser; import com.example.solidconnection.siteuser.repository.SiteUserRepository; import com.example.solidconnection.support.TestContainerSpringBootTest; -import com.example.solidconnection.type.Gender; import com.example.solidconnection.type.PostCategory; import com.example.solidconnection.type.PreparationStatus; import com.example.solidconnection.type.Role; @@ -67,10 +66,8 @@ private SiteUser createSiteUser() { "test@example.com", "nickname", "profileImageUrl", - "1999-01-01", PreparationStatus.CONSIDERING, - Role.MENTEE, - Gender.MALE + Role.MENTEE ); } @@ -118,7 +115,7 @@ private Post createPost(Board board, SiteUser siteUser) { System.err.println("ExecutorService did not terminate in the expected time."); } - Thread.sleep(SCHEDULING_DELAY_MS+1000); + Thread.sleep(SCHEDULING_DELAY_MS + 1000); assertEquals(THREAD_NUMS, postRepository.getById(post.getId()).getViewCount()); } @@ -164,7 +161,7 @@ private Post createPost(Board board, SiteUser siteUser) { System.err.println("ExecutorService did not terminate in the expected time."); } - Thread.sleep(SCHEDULING_DELAY_MS+1000); + Thread.sleep(SCHEDULING_DELAY_MS + 1000); assertEquals(2L, postRepository.getById(post.getId()).getViewCount()); } diff --git a/src/test/java/com/example/solidconnection/concurrency/ThunderingHerdTest.java b/src/test/java/com/example/solidconnection/concurrency/ThunderingHerdTest.java index 35ab993f5..4800a0153 100644 --- a/src/test/java/com/example/solidconnection/concurrency/ThunderingHerdTest.java +++ b/src/test/java/com/example/solidconnection/concurrency/ThunderingHerdTest.java @@ -4,7 +4,6 @@ import com.example.solidconnection.siteuser.domain.SiteUser; import com.example.solidconnection.siteuser.repository.SiteUserRepository; import com.example.solidconnection.support.TestContainerSpringBootTest; -import com.example.solidconnection.type.Gender; import com.example.solidconnection.type.PreparationStatus; import com.example.solidconnection.type.Role; import org.junit.jupiter.api.BeforeEach; @@ -46,10 +45,8 @@ private SiteUser createSiteUser() { "test@example.com", "nickname", "profileImageUrl", - "1999-01-01", PreparationStatus.CONSIDERING, - Role.MENTEE, - Gender.MALE + Role.MENTEE ); } diff --git a/src/test/java/com/example/solidconnection/custom/resolver/AuthorizedUserResolverTest.java b/src/test/java/com/example/solidconnection/custom/resolver/AuthorizedUserResolverTest.java index 779474c27..b517681aa 100644 --- a/src/test/java/com/example/solidconnection/custom/resolver/AuthorizedUserResolverTest.java +++ b/src/test/java/com/example/solidconnection/custom/resolver/AuthorizedUserResolverTest.java @@ -7,7 +7,6 @@ import com.example.solidconnection.siteuser.domain.SiteUser; import com.example.solidconnection.siteuser.repository.SiteUserRepository; import com.example.solidconnection.support.TestContainerSpringBootTest; -import com.example.solidconnection.type.Gender; import com.example.solidconnection.type.PreparationStatus; import com.example.solidconnection.type.Role; import org.junit.jupiter.api.BeforeEach; @@ -96,10 +95,8 @@ private SiteUser createAndSaveSiteUser() { "test@example.com", "nickname", "profileImageUrl", - "1999-01-01", PreparationStatus.CONSIDERING, - Role.MENTEE, - Gender.MALE + Role.MENTEE ); return siteUserRepository.save(siteUser); } diff --git a/src/test/java/com/example/solidconnection/custom/resolver/CustomPageableHandlerMethodArgumentResolverTest.java b/src/test/java/com/example/solidconnection/custom/resolver/CustomPageableHandlerMethodArgumentResolverTest.java new file mode 100644 index 000000000..dc628bc67 --- /dev/null +++ b/src/test/java/com/example/solidconnection/custom/resolver/CustomPageableHandlerMethodArgumentResolverTest.java @@ -0,0 +1,133 @@ +package com.example.solidconnection.custom.resolver; + +import com.example.solidconnection.support.TestContainerSpringBootTest; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.MethodParameter; +import org.springframework.data.domain.Pageable; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.web.context.request.NativeWebRequest; +import org.springframework.web.context.request.ServletWebRequest; + +import java.lang.reflect.Method; +import java.util.stream.Stream; + +import static org.assertj.core.api.Assertions.assertThat; + +@TestContainerSpringBootTest +@DisplayName("커스텀 페이지 요청 argument resolver 테스트") +class CustomPageableHandlerMethodArgumentResolverTest { + + private static final String PAGE_PARAMETER = "page"; + private static final String SIZE_PARAMETER = "size"; + private static final int DEFAULT_PAGE = 0; + private static final int DEFAULT_SIZE = 10; + private static final int MAX_SIZE = 50; + + @Autowired + private CustomPageableHandlerMethodArgumentResolver customPageableHandlerMethodArgumentResolver; + + private MockHttpServletRequest request; + private NativeWebRequest webRequest; + private MethodParameter parameter; + + @BeforeEach + void setUp() throws NoSuchMethodException { + request = new MockHttpServletRequest(); + webRequest = new ServletWebRequest(request); + Method method = TestController.class.getMethod("pageableMethod", Pageable.class); + parameter = new MethodParameter(method, 0); + } + + @Test + void 유효한_페이지_파라미터가_있으면_해당_값을_사용한다() { + // given + int expectedPage = 2; + request.setParameter(PAGE_PARAMETER, String.valueOf(expectedPage)); + + // when + Pageable pageable = customPageableHandlerMethodArgumentResolver + .resolveArgument(parameter, null, webRequest, null); + + // then + assertThat(pageable.getPageNumber()).isEqualTo(expectedPage - 1); + assertThat(pageable.getPageSize()).isEqualTo(DEFAULT_SIZE); + } + + @Test + void 유효한_사이즈_파라미터가_있으면_해당_값을_사용한다() { + // given + int expectedSize = 20; + request.setParameter(SIZE_PARAMETER, String.valueOf(expectedSize)); + + // when + Pageable pageable = customPageableHandlerMethodArgumentResolver + .resolveArgument(parameter, null, webRequest, null); + + // then + assertThat(pageable.getPageNumber()).isEqualTo(DEFAULT_PAGE); + assertThat(pageable.getPageSize()).isEqualTo(expectedSize); + } + + @Test + void 사이즈_파라미터가_최대값을_초과하면_최대값을_사용한다() { + // given + request.setParameter(SIZE_PARAMETER, String.valueOf(MAX_SIZE + 1)); + + // when + Pageable pageable = customPageableHandlerMethodArgumentResolver + .resolveArgument(parameter, null, webRequest, null); + + // then + assertThat(pageable.getPageSize()).isEqualTo(MAX_SIZE); + } + + @ParameterizedTest(name = "{0}") + @MethodSource("provideInvalidParameters") + void 페이지_파라미터가_유효하지_않으면_기본_값을_사용한다(String testName, String pageParam) { + // given + request.setParameter(PAGE_PARAMETER, pageParam); + + // when + Pageable pageable = customPageableHandlerMethodArgumentResolver + .resolveArgument(parameter, null, webRequest, null); + + // then + assertThat(pageable.getPageNumber()).isEqualTo(DEFAULT_PAGE); + } + + @ParameterizedTest(name = "{0}") + @MethodSource("provideInvalidParameters") + void 사이즈_파라미터가_유효하지_않으면_기본_값을_사용한다(String testName, String sizeParam) { + // given + request.setParameter(SIZE_PARAMETER, sizeParam); + + // when + Pageable pageable = customPageableHandlerMethodArgumentResolver + .resolveArgument(parameter, null, webRequest, null); + + // then + assertThat(pageable.getPageSize()).isEqualTo(DEFAULT_SIZE); + } + + static Stream provideInvalidParameters() { + return Stream.of( + Arguments.of("null", null), + Arguments.of("빈 문자열", ""), + Arguments.of("0", "0"), + Arguments.of("음수", "-1"), + Arguments.of("문자열", "invalid") + ); + } + + private static class TestController { + + public void pageableMethod(Pageable pageable) { + } + } +} diff --git a/src/test/java/com/example/solidconnection/custom/security/aspect/AdminAuthorizationAspectTest.java b/src/test/java/com/example/solidconnection/custom/security/aspect/AdminAuthorizationAspectTest.java index 2996eb5b6..0104c9ccd 100644 --- a/src/test/java/com/example/solidconnection/custom/security/aspect/AdminAuthorizationAspectTest.java +++ b/src/test/java/com/example/solidconnection/custom/security/aspect/AdminAuthorizationAspectTest.java @@ -4,7 +4,6 @@ import com.example.solidconnection.custom.security.annotation.RequireAdminAccess; import com.example.solidconnection.siteuser.domain.SiteUser; import com.example.solidconnection.support.TestContainerSpringBootTest; -import com.example.solidconnection.type.Gender; import com.example.solidconnection.type.PreparationStatus; import com.example.solidconnection.type.Role; import org.junit.jupiter.api.DisplayName; @@ -68,10 +67,8 @@ private SiteUser createSiteUser(Role role) { "test@example.com", "nickname", "profileImageUrl", - "1999-01-01", PreparationStatus.CONSIDERING, - role, - Gender.MALE + role ); } diff --git a/src/test/java/com/example/solidconnection/custom/security/authentication/SiteUserAuthenticationTest.java b/src/test/java/com/example/solidconnection/custom/security/authentication/SiteUserAuthenticationTest.java index 6932fcd28..6285727cb 100644 --- a/src/test/java/com/example/solidconnection/custom/security/authentication/SiteUserAuthenticationTest.java +++ b/src/test/java/com/example/solidconnection/custom/security/authentication/SiteUserAuthenticationTest.java @@ -2,7 +2,6 @@ import com.example.solidconnection.custom.security.userdetails.SiteUserDetails; import com.example.solidconnection.siteuser.domain.SiteUser; -import com.example.solidconnection.type.Gender; import com.example.solidconnection.type.PreparationStatus; import com.example.solidconnection.type.Role; import org.junit.jupiter.api.Test; @@ -64,10 +63,8 @@ private SiteUser createSiteUser() { "test@example.com", "nickname", "profileImageUrl", - "1999-01-01", PreparationStatus.CONSIDERING, - Role.MENTEE, - Gender.MALE + Role.MENTEE ); } } diff --git a/src/test/java/com/example/solidconnection/custom/security/provider/SiteUserAuthenticationProviderTest.java b/src/test/java/com/example/solidconnection/custom/security/provider/SiteUserAuthenticationProviderTest.java index 46d7498a2..423bec415 100644 --- a/src/test/java/com/example/solidconnection/custom/security/provider/SiteUserAuthenticationProviderTest.java +++ b/src/test/java/com/example/solidconnection/custom/security/provider/SiteUserAuthenticationProviderTest.java @@ -7,7 +7,6 @@ import com.example.solidconnection.siteuser.domain.SiteUser; import com.example.solidconnection.siteuser.repository.SiteUserRepository; import com.example.solidconnection.support.TestContainerSpringBootTest; -import com.example.solidconnection.type.Gender; import com.example.solidconnection.type.PreparationStatus; import com.example.solidconnection.type.Role; import io.jsonwebtoken.Jwts; @@ -150,10 +149,8 @@ private SiteUser createSiteUser() { "test@example.com", "nickname", "profileImageUrl", - "1999-01-01", PreparationStatus.CONSIDERING, - Role.MENTEE, - Gender.MALE + Role.MENTEE ); } } diff --git a/src/test/java/com/example/solidconnection/custom/security/userdetails/SiteUserDetailsServiceTest.java b/src/test/java/com/example/solidconnection/custom/security/userdetails/SiteUserDetailsServiceTest.java index 99e463955..0b2a0db73 100644 --- a/src/test/java/com/example/solidconnection/custom/security/userdetails/SiteUserDetailsServiceTest.java +++ b/src/test/java/com/example/solidconnection/custom/security/userdetails/SiteUserDetailsServiceTest.java @@ -4,7 +4,6 @@ import com.example.solidconnection.siteuser.domain.SiteUser; import com.example.solidconnection.siteuser.repository.SiteUserRepository; import com.example.solidconnection.support.TestContainerSpringBootTest; -import com.example.solidconnection.type.Gender; import com.example.solidconnection.type.PreparationStatus; import com.example.solidconnection.type.Role; import org.junit.jupiter.api.DisplayName; @@ -91,10 +90,8 @@ private SiteUser createSiteUser() { "test@example.com", "nickname", "profileImageUrl", - "1999-01-01", PreparationStatus.CONSIDERING, - Role.MENTEE, - Gender.MALE + Role.MENTEE ); } diff --git a/src/test/java/com/example/solidconnection/custom/security/userdetails/SiteUserDetailsTest.java b/src/test/java/com/example/solidconnection/custom/security/userdetails/SiteUserDetailsTest.java index 912072d2b..b49b9cf27 100644 --- a/src/test/java/com/example/solidconnection/custom/security/userdetails/SiteUserDetailsTest.java +++ b/src/test/java/com/example/solidconnection/custom/security/userdetails/SiteUserDetailsTest.java @@ -3,7 +3,6 @@ import com.example.solidconnection.siteuser.domain.SiteUser; import com.example.solidconnection.siteuser.repository.SiteUserRepository; import com.example.solidconnection.support.TestContainerSpringBootTest; -import com.example.solidconnection.type.Gender; import com.example.solidconnection.type.PreparationStatus; import com.example.solidconnection.type.Role; import org.junit.jupiter.api.DisplayName; @@ -42,10 +41,8 @@ private SiteUser createSiteUser() { "test@example.com", "nickname", "profileImageUrl", - "1999-01-01", PreparationStatus.CONSIDERING, - Role.MENTEE, - Gender.MALE + Role.MENTEE ); } } diff --git a/src/test/java/com/example/solidconnection/e2e/ApplicantsQueryTest.java b/src/test/java/com/example/solidconnection/e2e/ApplicantsQueryTest.java deleted file mode 100644 index 03d130542..000000000 --- a/src/test/java/com/example/solidconnection/e2e/ApplicantsQueryTest.java +++ /dev/null @@ -1,282 +0,0 @@ -package com.example.solidconnection.e2e; - -import com.example.solidconnection.application.domain.Application; -import com.example.solidconnection.application.domain.Gpa; -import com.example.solidconnection.application.domain.LanguageTest; -import com.example.solidconnection.application.dto.ApplicantResponse; -import com.example.solidconnection.application.dto.ApplicationsResponse; -import com.example.solidconnection.application.dto.UniversityApplicantsResponse; -import com.example.solidconnection.application.repository.ApplicationRepository; -import com.example.solidconnection.auth.service.AuthTokenProvider; -import com.example.solidconnection.siteuser.domain.SiteUser; -import com.example.solidconnection.siteuser.repository.SiteUserRepository; -import com.example.solidconnection.type.VerifyStatus; -import io.restassured.RestAssured; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; - -import java.util.List; - -import static com.example.solidconnection.e2e.DynamicFixture.createDummyGpa; -import static com.example.solidconnection.e2e.DynamicFixture.createDummyLanguageTest; -import static com.example.solidconnection.e2e.DynamicFixture.createSiteUserByEmail; -import static org.assertj.core.api.Assertions.assertThat; - -@DisplayName("지원자 조회 테스트") -class ApplicantsQueryTest extends UniversityDataSetUpEndToEndTest { - - @Autowired - private SiteUserRepository siteUserRepository; - - @Autowired - private ApplicationRepository applicationRepository; - - @Autowired - private AuthTokenProvider authTokenProvider; - - private String accessToken; - private String adminAccessToken; - private String user6AccessToken; - private Application 나의_지원정보; - private Application 사용자1_지원정보; - private Application 사용자2_지원정보; - private Application 사용자3_지원정보; - private Application 사용자4_이전학기_지원정보; - private Application 사용자5_관리자_지원정보; - private Application 사용자6_지원정보; - - @Value("${university.term}") - private String term; - private String beforeTerm = "1988-1"; - - @BeforeEach - public void setUpUserAndToken() { - // setUp - 사용자 정보 저장 - SiteUser 나 = siteUserRepository.save(createSiteUserByEmail("my-email")); - SiteUser 사용자1 = siteUserRepository.save(createSiteUserByEmail("email1")); - SiteUser 사용자2 = siteUserRepository.save(createSiteUserByEmail("email2")); - SiteUser 사용자3 = siteUserRepository.save(createSiteUserByEmail("email3")); - SiteUser 사용자4_이전학기_지원자 = siteUserRepository.save(createSiteUserByEmail("email4")); - SiteUser 사용자5_관리자 = siteUserRepository.save(createSiteUserByEmail("email5")); - SiteUser 사용자6 = siteUserRepository.save(createSiteUserByEmail("email6")); - - // setUp - 엑세스 토큰 생성과 리프레시 토큰 생성 및 저장 - accessToken = authTokenProvider.generateAccessToken(나); - authTokenProvider.generateAndSaveRefreshToken(나); - - adminAccessToken = authTokenProvider.generateAccessToken(사용자5_관리자); - authTokenProvider.generateAndSaveRefreshToken(사용자5_관리자); - - user6AccessToken = authTokenProvider.generateAccessToken(사용자6); - authTokenProvider.generateAndSaveRefreshToken(사용자6); - - // setUp - 지원 정보 저장 - Gpa gpa = createDummyGpa(); - LanguageTest languageTest = createDummyLanguageTest(); - 나의_지원정보 = new Application(나, gpa, languageTest, term); - 사용자1_지원정보 = new Application(사용자1, gpa, languageTest, term); - 사용자2_지원정보 = new Application(사용자2, gpa, languageTest, term); - 사용자3_지원정보 = new Application(사용자3, gpa, languageTest, term); - 사용자4_이전학기_지원정보 = new Application(사용자4_이전학기_지원자, gpa, languageTest, beforeTerm); - 사용자5_관리자_지원정보 = new Application(사용자5_관리자, gpa, languageTest, term); - 사용자6_지원정보 = new Application(사용자6, gpa, languageTest, term); - - 나의_지원정보.updateUniversityChoice(괌대학_B_지원_정보, 괌대학_A_지원_정보, 린츠_카톨릭대학_지원_정보, "0"); - 사용자1_지원정보.updateUniversityChoice(괌대학_A_지원_정보, 괌대학_B_지원_정보, 그라츠공과대학_지원_정보, "1"); - 사용자2_지원정보.updateUniversityChoice(메이지대학_지원_정보, 그라츠대학_지원_정보, 서던덴마크대학교_지원_정보, "2"); - 사용자3_지원정보.updateUniversityChoice(네바다주립대학_라스베이거스_지원_정보, 그라츠공과대학_지원_정보, 메이지대학_지원_정보, "3"); - 사용자4_이전학기_지원정보.updateUniversityChoice(네바다주립대학_라스베이거스_지원_정보, 그라츠공과대학_지원_정보, 메이지대학_지원_정보, "4"); - 사용자6_지원정보.updateUniversityChoice(코펜하겐IT대학_지원_정보, null, null, "6"); - 나의_지원정보.setVerifyStatus(VerifyStatus.APPROVED); - 사용자1_지원정보.setVerifyStatus(VerifyStatus.APPROVED); - 사용자2_지원정보.setVerifyStatus(VerifyStatus.APPROVED); - 사용자3_지원정보.setVerifyStatus(VerifyStatus.APPROVED); - 사용자4_이전학기_지원정보.setVerifyStatus(VerifyStatus.APPROVED); - 사용자5_관리자_지원정보.setVerifyStatus(VerifyStatus.APPROVED); - 사용자6_지원정보.setVerifyStatus(VerifyStatus.APPROVED); - applicationRepository.saveAll(List.of(나의_지원정보, 사용자1_지원정보, 사용자2_지원정보, 사용자3_지원정보, 사용자4_이전학기_지원정보, 사용자5_관리자_지원정보, 사용자6_지원정보)); - } - - @Test - void 전체_지원자를_조회한다() { - ApplicationsResponse response = RestAssured.given().log().all() - .header("Authorization", "Bearer " + accessToken) - .when().log().all() - .get("/applications/competitors") - .then().log().all() - .statusCode(200) - .extract().as(ApplicationsResponse.class); - - List firstChoiceApplicants = response.firstChoice(); - List secondChoiceApplicants = response.secondChoice(); - List thirdChoiceApplicants = response.thirdChoice(); - - assertThat(firstChoiceApplicants).containsAnyElementsOf(List.of( - UniversityApplicantsResponse.of(괌대학_A_지원_정보, - List.of(ApplicantResponse.of(사용자1_지원정보, false))), - UniversityApplicantsResponse.of(괌대학_B_지원_정보, - List.of(ApplicantResponse.of(나의_지원정보, true))), - UniversityApplicantsResponse.of(린츠_카톨릭대학_지원_정보, - List.of()) - )); - assertThat(secondChoiceApplicants).containsAnyElementsOf(List.of( - UniversityApplicantsResponse.of(괌대학_A_지원_정보, - List.of(ApplicantResponse.of(나의_지원정보, false))), - UniversityApplicantsResponse.of(괌대학_B_지원_정보, - List.of(ApplicantResponse.of(사용자1_지원정보, true))), - UniversityApplicantsResponse.of(린츠_카톨릭대학_지원_정보, - List.of()) - )); - assertThat(thirdChoiceApplicants).containsAnyElementsOf(List.of( - UniversityApplicantsResponse.of(괌대학_A_지원_정보, - List.of()), - UniversityApplicantsResponse.of(괌대학_B_지원_정보, - List.of()), - UniversityApplicantsResponse.of(린츠_카톨릭대학_지원_정보, - List.of(ApplicantResponse.of(나의_지원정보, true))) - )); - } - - @Test - void 지역으로_필터링해서_지원자를_조회한다() { - ApplicationsResponse response = RestAssured.given().log().all() - .header("Authorization", "Bearer " + accessToken) - .when().log().all() - .get("/applications/competitors?region=" + 영미권.getCode()) - .then().log().all() - .statusCode(200) - .extract().as(ApplicationsResponse.class); - - List firstChoiceApplicants = response.firstChoice(); - List secondChoiceApplicants = response.secondChoice(); - - assertThat(firstChoiceApplicants).containsAnyElementsOf(List.of( - UniversityApplicantsResponse.of(괌대학_A_지원_정보, - List.of(ApplicantResponse.of(사용자1_지원정보, false))), - UniversityApplicantsResponse.of(괌대학_B_지원_정보, - List.of(ApplicantResponse.of(나의_지원정보, true))) - )); - assertThat(secondChoiceApplicants).containsAnyElementsOf(List.of( - UniversityApplicantsResponse.of(괌대학_A_지원_정보, - List.of(ApplicantResponse.of(나의_지원정보, true))), - UniversityApplicantsResponse.of(괌대학_B_지원_정보, - List.of(ApplicantResponse.of(사용자1_지원정보, false))) - )); - } - - @Test - void 지원자를_조회할_때_이전학기_지원자는_조회되지_않는다() { - ApplicationsResponse response = RestAssured.given().log().all() - .header("Authorization", "Bearer " + accessToken) - .when().log().all() - .get("/applications/competitors") - .then().log().all() - .statusCode(200) - .extract().as(ApplicationsResponse.class); - - List firstChoiceApplicants = response.firstChoice(); - List secondChoiceApplicants = response.secondChoice(); - List thirdChoiceApplicants = response.thirdChoice(); - - - assertThat(firstChoiceApplicants).doesNotContainAnyElementsOf(List.of( - UniversityApplicantsResponse.of(네바다주립대학_라스베이거스_지원_정보, - List.of(ApplicantResponse.of(사용자4_이전학기_지원정보, false))) - )); - assertThat(secondChoiceApplicants).doesNotContainAnyElementsOf(List.of( - UniversityApplicantsResponse.of(네바다주립대학_라스베이거스_지원_정보, - List.of(ApplicantResponse.of(사용자4_이전학기_지원정보, false))) - )); - assertThat(thirdChoiceApplicants).doesNotContainAnyElementsOf(List.of( - UniversityApplicantsResponse.of(네바다주립대학_라스베이거스_지원_정보, - List.of(ApplicantResponse.of(사용자4_이전학기_지원정보, false))) - )); - } - - @Test - void 경쟁자를_조회한다() { - ApplicationsResponse response = RestAssured.given().log().all() - .header("Authorization", "Bearer " + accessToken) - .when().log().all() - .get("/applications/competitors") - .then().log().all() - .statusCode(200) - .extract().as(ApplicationsResponse.class); - - Integer choicedUniversityCount = 3; - - List firstChoiceApplicants = response.firstChoice(); - List secondChoiceApplicants = response.secondChoice(); - List thirdChoiceApplicants = response.thirdChoice(); - - assertThat(firstChoiceApplicants).containsExactlyInAnyOrder( - UniversityApplicantsResponse.of(괌대학_A_지원_정보, - List.of(ApplicantResponse.of(사용자1_지원정보, false))), - UniversityApplicantsResponse.of(괌대학_B_지원_정보, - List.of(ApplicantResponse.of(나의_지원정보, true))), - UniversityApplicantsResponse.of(린츠_카톨릭대학_지원_정보, List.of())); - assertThat(secondChoiceApplicants).containsExactlyInAnyOrder( - UniversityApplicantsResponse.of(괌대학_A_지원_정보, - List.of(ApplicantResponse.of(나의_지원정보, true))), - UniversityApplicantsResponse.of(괌대학_B_지원_정보, - List.of(ApplicantResponse.of(사용자1_지원정보, false))), - UniversityApplicantsResponse.of(린츠_카톨릭대학_지원_정보, - List.of())); - assertThat(thirdChoiceApplicants).containsExactlyInAnyOrder( - UniversityApplicantsResponse.of(괌대학_A_지원_정보, - List.of()), - UniversityApplicantsResponse.of(괌대학_B_지원_정보, - List.of()), - UniversityApplicantsResponse.of(린츠_카톨릭대학_지원_정보, - List.of(ApplicantResponse.of(나의_지원정보, true)))); - - assertThat(firstChoiceApplicants.size()).isEqualTo(choicedUniversityCount); - assertThat(secondChoiceApplicants.size()).isEqualTo(choicedUniversityCount); - assertThat(thirdChoiceApplicants.size()).isEqualTo(choicedUniversityCount); - } - - @Test - void 지원_대학중_미선택이_있을_떄_경쟁자를_조회한다() { - ApplicationsResponse response = RestAssured.given().log().all() - .header("Authorization", "Bearer " + user6AccessToken) - .when().log().all() - .get("/applications/competitors") - .then().log().all() - .statusCode(200) - .extract().as(ApplicationsResponse.class); - - Integer choicedUniversityCount = 1; - - List firstChoiceApplicants = response.firstChoice(); - List secondChoiceApplicants = response.secondChoice(); - List thirdChoiceApplicants = response.thirdChoice(); - - assertThat(firstChoiceApplicants.size()).isEqualTo(choicedUniversityCount); - assertThat(secondChoiceApplicants.size()).isEqualTo(choicedUniversityCount); - assertThat(thirdChoiceApplicants.size()).isEqualTo(choicedUniversityCount); - } - - @Test - void 지원_대학이_모두_미선택일_때_경쟁자를_조회한다() { - ApplicationsResponse response = RestAssured.given().log().all() - .header("Authorization", "Bearer " + adminAccessToken) - .when().log().all() - .get("/applications/competitors") - .then().log().all() - .statusCode(200) - .extract().as(ApplicationsResponse.class); - - Integer choicedUniversityCount = 0; - - List firstChoiceApplicants = response.firstChoice(); - List secondChoiceApplicants = response.secondChoice(); - List thirdChoiceApplicants = response.thirdChoice(); - - assertThat(firstChoiceApplicants.size()).isEqualTo(choicedUniversityCount); - assertThat(secondChoiceApplicants.size()).isEqualTo(choicedUniversityCount); - assertThat(thirdChoiceApplicants.size()).isEqualTo(choicedUniversityCount); - } -} diff --git a/src/test/java/com/example/solidconnection/e2e/BaseEndToEndTest.java b/src/test/java/com/example/solidconnection/e2e/BaseEndToEndTest.java deleted file mode 100644 index 0b3ac3524..000000000 --- a/src/test/java/com/example/solidconnection/e2e/BaseEndToEndTest.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.example.solidconnection.e2e; - -import com.example.solidconnection.support.DatabaseClearExtension; -import com.example.solidconnection.support.TestContainerSpringBootTest; -import io.restassured.RestAssured; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.boot.test.web.server.LocalServerPort; - -@TestContainerSpringBootTest -@ExtendWith(DatabaseClearExtension.class) -abstract class BaseEndToEndTest { - - @LocalServerPort - private int port; - - @BeforeEach - public void setUp() { - RestAssured.port = port; - } -} diff --git a/src/test/java/com/example/solidconnection/e2e/DynamicFixture.java b/src/test/java/com/example/solidconnection/e2e/DynamicFixture.java index 09c97d46e..43af92ea5 100644 --- a/src/test/java/com/example/solidconnection/e2e/DynamicFixture.java +++ b/src/test/java/com/example/solidconnection/e2e/DynamicFixture.java @@ -1,92 +1,18 @@ package com.example.solidconnection.e2e; -import com.example.solidconnection.application.domain.Gpa; -import com.example.solidconnection.application.domain.LanguageTest; -import com.example.solidconnection.auth.dto.oauth.KakaoUserInfoDto; import com.example.solidconnection.siteuser.domain.SiteUser; -import com.example.solidconnection.type.Gender; -import com.example.solidconnection.type.LanguageTestType; import com.example.solidconnection.type.PreparationStatus; import com.example.solidconnection.type.Role; -import com.example.solidconnection.type.SemesterAvailableForDispatch; -import com.example.solidconnection.type.TuitionFeeType; -import com.example.solidconnection.university.domain.LanguageRequirement; -import com.example.solidconnection.university.domain.LikedUniversity; -import com.example.solidconnection.university.domain.University; -import com.example.solidconnection.university.domain.UniversityInfoForApply; -import java.util.Set; - -public class DynamicFixture { +public class DynamicFixture { // todo: test fixture 개선 작업 이후, 이 클래스의 사용이 대체되면 삭제 필요 public static SiteUser createSiteUserByEmail(String email) { return new SiteUser( email, "nickname", "profileImage", - "2000-01-01", PreparationStatus.CONSIDERING, - Role.MENTEE, - Gender.FEMALE - ); - } - - public static SiteUser createSiteUserByNickName(String nickname) { - return new SiteUser( - "email@email.com", - nickname, - "profileImage", - "2000-01-01", - PreparationStatus.CONSIDERING, - Role.MENTEE, - Gender.FEMALE - ); - } - - public static KakaoUserInfoDto createKakaoUserInfoDtoByEmail(String email) { - return new KakaoUserInfoDto( - new KakaoUserInfoDto.KakaoAccountDto( - new KakaoUserInfoDto.KakaoAccountDto.KakaoProfileDto( - "nickname", - "profileImageUrl" - ), - email - ) + Role.MENTEE ); } - - public static UniversityInfoForApply createUniversityForApply( - String term, University university, Set languageRequirements) { - return new UniversityInfoForApply( - null, - term, - "koreanName", - 1, - TuitionFeeType.HOME_UNIVERSITY_PAYMENT, - SemesterAvailableForDispatch.ONE_SEMESTER, - "1", - "detailsForLanguage", - "gpaRequirement", - "gpaRequirementCriteria", - "detailsForApply", - "detailsForMajor", - "detailsForAccommodation", - "detailsForEnglishCourse", - "details", - languageRequirements, - university); - } - - public static LikedUniversity createLikedUniversity( - SiteUser siteUser, UniversityInfoForApply universityInfoForApply) { - return new LikedUniversity(null, universityInfoForApply, siteUser); - } - - public static Gpa createDummyGpa() { - return new Gpa(3.5, 4.0, "gpaReportUrl"); - } - - public static LanguageTest createDummyLanguageTest() { - return new LanguageTest(LanguageTestType.TOEIC, "900", "toeicReportUrl"); - } } diff --git a/src/test/java/com/example/solidconnection/e2e/MyPageTest.java b/src/test/java/com/example/solidconnection/e2e/MyPageTest.java deleted file mode 100644 index dd2ce1e3a..000000000 --- a/src/test/java/com/example/solidconnection/e2e/MyPageTest.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.example.solidconnection.e2e; - -import com.example.solidconnection.auth.service.AuthTokenProvider; -import com.example.solidconnection.siteuser.domain.SiteUser; -import com.example.solidconnection.siteuser.dto.MyPageResponse; -import com.example.solidconnection.siteuser.repository.SiteUserRepository; -import io.restassured.RestAssured; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.HttpStatus; - -import static com.example.solidconnection.e2e.DynamicFixture.createSiteUserByEmail; -import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.assertAll; - -@DisplayName("마이페이지 테스트") -class MyPageTest extends BaseEndToEndTest { - - private SiteUser siteUser; - - @Autowired - private SiteUserRepository siteUserRepository; - - @Autowired - private AuthTokenProvider authTokenProvider; - - private String accessToken; - - @BeforeEach - public void setUpUserAndToken() { - // setUp - 회원 정보 저장 - siteUser = siteUserRepository.save(createSiteUserByEmail("email")); - - // setUp - 엑세스 토큰 생성과 리프레시 토큰 생성 및 저장 - accessToken = authTokenProvider.generateAccessToken(siteUser); - authTokenProvider.generateAndSaveRefreshToken(siteUser); - } - - @Test - void 마이페이지_정보를_조회한다() { - // request - 요청 - MyPageResponse myPageResponse = RestAssured.given() - .header("Authorization", "Bearer " + accessToken) - .log().all() - .get("/my") - .then().log().all() - .statusCode(HttpStatus.OK.value()) - .extract().as(MyPageResponse.class); - - assertAll("불러온 마이 페이지 정보가 DB의 정보와 일치한다.", - () -> assertThat(myPageResponse.nickname()).isEqualTo(siteUser.getNickname()), - () -> assertThat(myPageResponse.birth()).isEqualTo(siteUser.getBirth()), - () -> assertThat(myPageResponse.profileImageUrl()).isEqualTo(siteUser.getProfileImageUrl()), - () -> assertThat(myPageResponse.email()).isEqualTo(siteUser.getEmail())); - } -} diff --git a/src/test/java/com/example/solidconnection/e2e/SignInTest.java b/src/test/java/com/example/solidconnection/e2e/SignInTest.java deleted file mode 100644 index cc16f71c1..000000000 --- a/src/test/java/com/example/solidconnection/e2e/SignInTest.java +++ /dev/null @@ -1,137 +0,0 @@ -package com.example.solidconnection.e2e; - -import com.example.solidconnection.auth.client.KakaoOAuthClient; -import com.example.solidconnection.auth.dto.oauth.OAuthSignInResponse; -import com.example.solidconnection.auth.dto.oauth.SignUpPrepareResponse; -import com.example.solidconnection.auth.dto.oauth.OAuthCodeRequest; -import com.example.solidconnection.auth.dto.oauth.KakaoUserInfoDto; -import com.example.solidconnection.siteuser.domain.SiteUser; -import com.example.solidconnection.siteuser.repository.SiteUserRepository; -import io.restassured.RestAssured; -import io.restassured.http.ContentType; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.data.redis.core.RedisTemplate; -import org.springframework.http.HttpStatus; - -import java.time.LocalDate; - -import static com.example.solidconnection.auth.domain.TokenType.REFRESH; -import static com.example.solidconnection.auth.domain.TokenType.SIGN_UP; -import static com.example.solidconnection.e2e.DynamicFixture.createKakaoUserInfoDtoByEmail; -import static com.example.solidconnection.e2e.DynamicFixture.createSiteUserByEmail; -import static com.example.solidconnection.scheduler.UserRemovalScheduler.ACCOUNT_RECOVER_DURATION; -import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.assertAll; -import static org.mockito.BDDMockito.given; - -@DisplayName("카카오 로그인 테스트") -class SignInTest extends BaseEndToEndTest { - - @Autowired - SiteUserRepository siteUserRepository; - - @Autowired - RedisTemplate redisTemplate; - - @MockBean - KakaoOAuthClient kakaoOAuthClient; - - @Test - void 신규_회원이_카카오로_로그인한다() { - // stub - kakaoOAuthClient 가 정해진 사용자 프로필 정보를 반환하도록 - String kakaoCode = "kakaoCode"; - String email = "email@email.com"; - KakaoUserInfoDto kakaoUserInfoDto = createKakaoUserInfoDtoByEmail(email); - given(kakaoOAuthClient.getUserInfo(kakaoCode)) - .willReturn(kakaoUserInfoDto); - - // request - body 생성 및 요청 - OAuthCodeRequest OAuthCodeRequest = new OAuthCodeRequest(kakaoCode); - SignUpPrepareResponse response = RestAssured.given().log().all() - .contentType(ContentType.JSON) - .body(OAuthCodeRequest) - .when().post("/auth/kakao") - .then().log().all() - .statusCode(HttpStatus.OK.value()) - .extract().as(SignUpPrepareResponse.class); - - KakaoUserInfoDto.KakaoAccountDto.KakaoProfileDto kakaoProfileDto = kakaoUserInfoDto.kakaoAccountDto().profile(); - assertAll("카카오톡 사용자 정보를 응답한다.", - () -> assertThat(response.isRegistered()).isFalse(), - () -> assertThat(response.email()).isEqualTo(email), - () -> assertThat(response.nickname()).isEqualTo(kakaoProfileDto.nickname()), - () -> assertThat(response.profileImageUrl()).isEqualTo(kakaoProfileDto.profileImageUrl()), - () -> assertThat(response.signUpToken()).isNotNull()); - assertThat(redisTemplate.opsForValue().get(SIGN_UP.addPrefix(email))) - .as("카카오 인증 토큰을 저장한다.") - .isEqualTo(response.signUpToken()); - } - - @Test - void 기존_회원이_카카오로_로그인한다() { - // stub - kakaoOAuthClient 가 정해진 사용자 프로필 정보를 반환하도록 - String kakaoCode = "kakaoCode"; - String email = "email@email.com"; - given(kakaoOAuthClient.getUserInfo(kakaoCode)) - .willReturn(createKakaoUserInfoDtoByEmail(email)); - - // setUp - 사용자 정보 저장 - SiteUser siteUser = siteUserRepository.save(createSiteUserByEmail(email)); - - // request - body 생성 및 요청 - OAuthCodeRequest oAuthCodeRequest = new OAuthCodeRequest(kakaoCode); - OAuthSignInResponse response = RestAssured.given().log().all() - .contentType(ContentType.JSON) - .body(oAuthCodeRequest) - .when().post("/auth/kakao") - .then().log().all() - .statusCode(HttpStatus.OK.value()) - .extract().as(OAuthSignInResponse.class); - - assertAll("리프레스 토큰과 엑세스 토큰을 응답한다.", - () -> assertThat(response.isRegistered()).isTrue(), - () -> assertThat(response.accessToken()).isNotNull(), - () -> assertThat(response.refreshToken()).isNotNull()); - assertThat(redisTemplate.opsForValue().get(REFRESH.addPrefix(siteUser.getId().toString()))) - .as("리프레시 토큰을 저장한다.") - .isEqualTo(response.refreshToken()); - } - - @Test - void 탈퇴한_회원이_계정_복구_기간_안에_다시_로그인하면_탈퇴가_무효화된다() { - // stub - kakaoOAuthClient 가 정해진 사용자 프로필 정보를 반환하도록 - String kakaoCode = "kakaoCode"; - String email = "email@email.com"; - given(kakaoOAuthClient.getUserInfo(kakaoCode)) - .willReturn(createKakaoUserInfoDtoByEmail(email)); - - // setUp - 계정 복구 기간이 되지 않은 사용자 저장 - SiteUser siteUserFixture = createSiteUserByEmail(email); - LocalDate justBeforeRemoval = LocalDate.now().minusDays(ACCOUNT_RECOVER_DURATION - 1); - siteUserFixture.setQuitedAt(justBeforeRemoval); - SiteUser siteUser = siteUserRepository.save(siteUserFixture); - - // request - body 생성 및 요청 - OAuthCodeRequest OAuthCodeRequest = new OAuthCodeRequest(kakaoCode); - OAuthSignInResponse response = RestAssured.given().log().all() - .contentType(ContentType.JSON) - .body(OAuthCodeRequest) - .when().post("/auth/kakao") - .then().log().all() - .statusCode(HttpStatus.OK.value()) - .extract().as(OAuthSignInResponse.class); - - SiteUser updatedSiteUser = siteUserRepository.findById(siteUser.getId()).get(); - assertAll("리프레스 토큰과 엑세스 토큰을 응답하고, 탈퇴 날짜를 초기화한다.", - () -> assertThat(response.isRegistered()).isTrue(), - () -> assertThat(response.accessToken()).isNotNull(), - () -> assertThat(response.refreshToken()).isNotNull(), - () -> assertThat(updatedSiteUser.getQuitedAt()).isNull()); - assertThat(redisTemplate.opsForValue().get(REFRESH.addPrefix(siteUser.getId().toString()))) - .as("리프레시 토큰을 저장한다.") - .isEqualTo(response.refreshToken()); - } -} diff --git a/src/test/java/com/example/solidconnection/e2e/SignUpTest.java b/src/test/java/com/example/solidconnection/e2e/SignUpTest.java deleted file mode 100644 index f6b356178..000000000 --- a/src/test/java/com/example/solidconnection/e2e/SignUpTest.java +++ /dev/null @@ -1,186 +0,0 @@ -package com.example.solidconnection.e2e; - -import com.example.solidconnection.auth.dto.SignInResponse; -import com.example.solidconnection.auth.dto.SignUpRequest; -import com.example.solidconnection.auth.service.AuthTokenProvider; -import com.example.solidconnection.auth.service.oauth.OAuthSignUpTokenProvider; -import com.example.solidconnection.custom.response.ErrorResponse; -import com.example.solidconnection.entity.Country; -import com.example.solidconnection.entity.InterestedCountry; -import com.example.solidconnection.entity.InterestedRegion; -import com.example.solidconnection.entity.Region; -import com.example.solidconnection.repositories.CountryRepository; -import com.example.solidconnection.repositories.InterestedCountyRepository; -import com.example.solidconnection.repositories.InterestedRegionRepository; -import com.example.solidconnection.repositories.RegionRepository; -import com.example.solidconnection.siteuser.domain.AuthType; -import com.example.solidconnection.siteuser.domain.SiteUser; -import com.example.solidconnection.siteuser.repository.SiteUserRepository; -import com.example.solidconnection.type.Gender; -import com.example.solidconnection.type.PreparationStatus; -import io.restassured.RestAssured; -import io.restassured.http.ContentType; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.redis.core.RedisTemplate; -import org.springframework.http.HttpStatus; - -import java.util.List; - -import static com.example.solidconnection.auth.domain.TokenType.REFRESH; -import static com.example.solidconnection.custom.exception.ErrorCode.NICKNAME_ALREADY_EXISTED; -import static com.example.solidconnection.custom.exception.ErrorCode.SIGN_UP_TOKEN_INVALID; -import static com.example.solidconnection.custom.exception.ErrorCode.USER_ALREADY_EXISTED; -import static com.example.solidconnection.e2e.DynamicFixture.createSiteUserByEmail; -import static com.example.solidconnection.e2e.DynamicFixture.createSiteUserByNickName; -import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.assertAll; - -@DisplayName("회원가입 테스트") -class SignUpTest extends BaseEndToEndTest { - - @Autowired - SiteUserRepository siteUserRepository; - - @Autowired - CountryRepository countryRepository; - - @Autowired - RegionRepository regionRepository; - - @Autowired - InterestedRegionRepository interestedRegionRepository; - - @Autowired - InterestedCountyRepository interestedCountyRepository; - - @Autowired - AuthTokenProvider authTokenProvider; - - @Autowired - OAuthSignUpTokenProvider OAuthSignUpTokenProvider; - - @Autowired - RedisTemplate redisTemplate; - - @Test - void 유효한_카카오_토큰으로_회원가입한다() { - // setup - 국가, 지역 정보 저장 - Region region = regionRepository.save(new Region("EROUPE", "유럽")); - List countries = countryRepository.saveAll(List.of( - new Country("FR", "프랑스", region), - new Country("DE", "독일", region))); - - // setup - 카카오 토큰 발급 - String email = "email@email.com"; - String generatedKakaoToken = OAuthSignUpTokenProvider.generateAndSaveSignUpToken(email, AuthType.KAKAO); - - // request - body 생성 및 요청 - List interestedRegionNames = List.of("유럽"); - List interestedCountryNames = List.of("프랑스", "독일"); - SignUpRequest signUpRequest = new SignUpRequest(generatedKakaoToken, interestedRegionNames, interestedCountryNames, - PreparationStatus.CONSIDERING, "profile", Gender.FEMALE, "nickname", "2000-01-01"); - SignInResponse response = RestAssured.given().log().all() - .contentType(ContentType.JSON) - .body(signUpRequest) - .when().post("/auth/sign-up") - .then().log().all() - .statusCode(HttpStatus.OK.value()) - .extract().as(SignInResponse.class); - - SiteUser savedSiteUser = siteUserRepository.findByEmailAndAuthType(email, AuthType.KAKAO).get(); - assertAll( - "회원 정보를 저장한다.", - () -> assertThat(savedSiteUser.getId()).isNotNull(), - () -> assertThat(savedSiteUser.getEmail()).isEqualTo(email), - () -> assertThat(savedSiteUser.getBirth()).isEqualTo(signUpRequest.birth()), - () -> assertThat(savedSiteUser.getNickname()).isEqualTo(signUpRequest.nickname()), - () -> assertThat(savedSiteUser.getProfileImageUrl()).isEqualTo(signUpRequest.profileImageUrl()), - () -> assertThat(savedSiteUser.getGender()).isEqualTo(signUpRequest.gender()), - () -> assertThat(savedSiteUser.getPreparationStage()).isEqualTo(signUpRequest.preparationStatus())); - - List interestedRegions = interestedRegionRepository.findAllBySiteUser(savedSiteUser).stream() - .map(InterestedRegion::getRegion) - .toList(); - List interestedCountries = interestedCountyRepository.findAllBySiteUser(savedSiteUser).stream() - .map(InterestedCountry::getCountry) - .toList(); - assertAll( - "관심 지역과 나라 정보를 저장한다.", - () -> assertThat(interestedRegions).containsExactlyInAnyOrder(region), - () -> assertThat(interestedCountries).containsExactlyInAnyOrderElementsOf(countries) - ); - - assertThat(redisTemplate.opsForValue().get(REFRESH.addPrefix(savedSiteUser.getId().toString()))) - .as("리프레시 토큰을 저장한다.") - .isEqualTo(response.refreshToken()); - } - - @Test - void 이미_있는_닉네임으로_회원가입하면_예외를_응답한다() { - // setup - 회원 정보 저장 - String alreadyExistNickname = "nickname"; - SiteUser alreadyExistUser = createSiteUserByNickName(alreadyExistNickname); - siteUserRepository.save(alreadyExistUser); - - // setup - 카카오 토큰 발급 - String email = "test@email.com"; - String generatedKakaoToken = OAuthSignUpTokenProvider.generateAndSaveSignUpToken(email, AuthType.KAKAO); - - // request - body 생성 및 요청 - SignUpRequest signUpRequest = new SignUpRequest(generatedKakaoToken, null, null, - PreparationStatus.CONSIDERING, "profile", Gender.FEMALE, alreadyExistNickname, "2000-01-01"); - ErrorResponse errorResponse = RestAssured.given().log().all() - .contentType(ContentType.JSON) - .body(signUpRequest) - .when().post("/auth/sign-up") - .then().log().all() - .statusCode(HttpStatus.CONFLICT.value()) - .extract().as(ErrorResponse.class); - - assertThat(errorResponse.message()) - .isEqualTo(NICKNAME_ALREADY_EXISTED.getMessage()); - } - - @Test - void 이미_있는_이메일로_회원가입하면_예외를_응답한다() { - // setup - 회원 정보 저장 - String alreadyExistEmail = "email@email.com"; - SiteUser alreadyExistUser = createSiteUserByEmail(alreadyExistEmail); - siteUserRepository.save(alreadyExistUser); - - // setup - 카카오 토큰 발급 - String generatedKakaoToken = OAuthSignUpTokenProvider.generateAndSaveSignUpToken(alreadyExistEmail, AuthType.KAKAO); - - // request - body 생성 및 요청 - SignUpRequest signUpRequest = new SignUpRequest(generatedKakaoToken, null, null, - PreparationStatus.CONSIDERING, "profile", Gender.FEMALE, "nickname0", "2000-01-01"); - ErrorResponse errorResponse = RestAssured.given().log().all() - .contentType(ContentType.JSON) - .body(signUpRequest) - .when().post("/auth/sign-up") - .then().log().all() - .statusCode(HttpStatus.CONFLICT.value()) - .extract().as(ErrorResponse.class); - - assertThat(errorResponse.message()) - .isEqualTo(USER_ALREADY_EXISTED.getMessage()); - } - - @Test - void 유효하지_않은_카카오_토큰으로_회원가입을_하면_예외를_응답한다() { - SignUpRequest signUpRequest = new SignUpRequest("invalid", null, null, - PreparationStatus.CONSIDERING, "profile", Gender.FEMALE, "nickname", "2000-01-01"); - ErrorResponse errorResponse = RestAssured.given().log().all() - .contentType(ContentType.JSON) - .body(signUpRequest) - .when().post("/auth/sign-up") - .then().log().all() - .statusCode(HttpStatus.BAD_REQUEST.value()) - .extract().as(ErrorResponse.class); - - assertThat(errorResponse.message()) - .contains(SIGN_UP_TOKEN_INVALID.getMessage()); - } -} diff --git a/src/test/java/com/example/solidconnection/e2e/UniversityDataSetUpEndToEndTest.java b/src/test/java/com/example/solidconnection/e2e/UniversityDataSetUpEndToEndTest.java deleted file mode 100644 index 20a0bbc6b..000000000 --- a/src/test/java/com/example/solidconnection/e2e/UniversityDataSetUpEndToEndTest.java +++ /dev/null @@ -1,288 +0,0 @@ -package com.example.solidconnection.e2e; - -import com.example.solidconnection.entity.Country; -import com.example.solidconnection.entity.Region; -import com.example.solidconnection.repositories.CountryRepository; -import com.example.solidconnection.repositories.RegionRepository; -import com.example.solidconnection.support.DatabaseClearExtension; -import com.example.solidconnection.support.TestContainerSpringBootTest; -import com.example.solidconnection.type.LanguageTestType; -import com.example.solidconnection.university.domain.LanguageRequirement; -import com.example.solidconnection.university.domain.University; -import com.example.solidconnection.university.domain.UniversityInfoForApply; -import com.example.solidconnection.university.repository.LanguageRequirementRepository; -import com.example.solidconnection.university.repository.UniversityInfoForApplyRepository; -import com.example.solidconnection.university.repository.UniversityRepository; -import io.restassured.RestAssured; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.test.web.server.LocalServerPort; - -import java.util.HashSet; - -import static com.example.solidconnection.type.SemesterAvailableForDispatch.ONE_SEMESTER; -import static com.example.solidconnection.type.TuitionFeeType.HOME_UNIVERSITY_PAYMENT; - -@ExtendWith(DatabaseClearExtension.class) -@TestContainerSpringBootTest -abstract class UniversityDataSetUpEndToEndTest { - - public static Region 영미권; - public static Region 유럽; - public static Region 아시아; - public static Country 미국; - public static Country 캐나다; - public static Country 덴마크; - public static Country 오스트리아; - public static Country 일본; - - public static University 영미권_미국_괌대학; - public static University 영미권_미국_네바다주립대학_라스베이거스; - public static University 영미권_캐나다_메모리얼대학_세인트존스; - public static University 유럽_덴마크_서던덴마크대학교; - public static University 유럽_덴마크_코펜하겐IT대학; - public static University 유럽_오스트리아_그라츠대학; - public static University 유럽_오스트리아_그라츠공과대학; - public static University 유럽_오스트리아_린츠_카톨릭대학; - public static University 아시아_일본_메이지대학; - - public static UniversityInfoForApply 괌대학_A_지원_정보; - public static UniversityInfoForApply 괌대학_B_지원_정보; - public static UniversityInfoForApply 네바다주립대학_라스베이거스_지원_정보; - public static UniversityInfoForApply 메모리얼대학_세인트존스_A_지원_정보; - public static UniversityInfoForApply 서던덴마크대학교_지원_정보; - public static UniversityInfoForApply 코펜하겐IT대학_지원_정보; - public static UniversityInfoForApply 그라츠대학_지원_정보; - public static UniversityInfoForApply 그라츠공과대학_지원_정보; - public static UniversityInfoForApply 린츠_카톨릭대학_지원_정보; - public static UniversityInfoForApply 메이지대학_지원_정보; - - @Value("${university.term}") - public String term; - - @LocalServerPort - private int port; - - @Autowired - private RegionRepository regionRepository; - - @Autowired - private CountryRepository countryRepository; - - @Autowired - private UniversityRepository universityRepository; - - @Autowired - private UniversityInfoForApplyRepository universityInfoForApplyRepository; - - @Autowired - private LanguageRequirementRepository languageRequirementRepository; - - @BeforeEach - public void setUpBasicData() { - RestAssured.port = port; - - 영미권 = regionRepository.save(new Region("AMERICAS", "영미권")); - 유럽 = regionRepository.save(new Region("EUROPE", "유럽")); - 아시아 = regionRepository.save(new Region("ASIA", "아시아")); - - 미국 = countryRepository.save(new Country("US", "미국", 영미권)); - 캐나다 = countryRepository.save(new Country("CA", "캐나다", 영미권)); - 덴마크 = countryRepository.save(new Country("DK", "덴마크", 유럽)); - 오스트리아 = countryRepository.save(new Country("AT", "오스트리아", 유럽)); - 일본 = countryRepository.save(new Country("JP", "일본", 아시아)); - - 영미권_미국_괌대학 = universityRepository.save(new University( - null, "괌대학", "University of Guam", "university_of_guam", - "https://www.uog.edu/admissions/international-students", - "https://www.uog.edu/admissions/course-schedule", - "https://www.uog.edu/life-at-uog/residence-halls/", - "https://solid-connection.s3.ap-northeast-2.amazonaws.com/original/university_of_guam/logo.png", - "https://solid-connection.s3.ap-northeast-2.amazonaws.com/original/university_of_guam/1.png", - null, 미국, 영미권 - )); - - 영미권_미국_네바다주립대학_라스베이거스 = universityRepository.save(new University( - null, "네바다주립대학 라스베이거스", "University of Nevada, Las Vegas", "university_of_nevada_las_vegas", - "https://www.unlv.edu/engineering/eip", - "https://www.unlv.edu/engineering/academic-programs", - "https://www.unlv.edu/housing", - "https://solid-connection.s3.ap-northeast-2.amazonaws.com/original/university_of_nevada_las_vegas/logo.png", - "https://solid-connection.s3.ap-northeast-2.amazonaws.com/original/university_of_nevada_las_vegas/1.png", - null, 미국, 영미권 - )); - - 영미권_캐나다_메모리얼대학_세인트존스 = universityRepository.save(new University( - null, "메모리얼 대학 세인트존스", "Memorial University of Newfoundland St. John's", "memorial_university_of_newfoundland_st_johns", - "https://mun.ca/goabroad/visiting-students-inbound/", - "https://www.unlv.edu/engineering/academic-programs", - "https://www.mun.ca/residences/", - "https://solid-connection.s3.ap-northeast-2.amazonaws.com/original/memorial_university_of_newfoundland_st_johns/logo.png", - "https://solid-connection.s3.ap-northeast-2.amazonaws.com/original/memorial_university_of_newfoundland_st_johns/1.png", - null, 캐나다, 영미권 - )); - - 유럽_덴마크_서던덴마크대학교 = universityRepository.save(new University( - null, "서던덴마크대학교", "University of Southern Denmark", "university_of_southern_denmark", - "https://www.sdu.dk/en", - "https://www.sdu.dk/en", - "https://www.sdu.dk/en/uddannelse/information_for_international_students/studenthousing", - "https://solid-connection.s3.ap-northeast-2.amazonaws.com/original/university_of_southern_denmark/logo.png", - "https://solid-connection.s3.ap-northeast-2.amazonaws.com/original/university_of_southern_denmark/1.png", - null, 덴마크, 유럽 - )); - - 유럽_덴마크_코펜하겐IT대학 = universityRepository.save(new University( - null, "코펜하겐 IT대학", "IT University of Copenhagen", "it_university_of_copenhagen", - "https://en.itu.dk/", null, - "https://en.itu.dk/Programmes/Student-Life/Practical-information-for-international-students", - "https://solid-connection.s3.ap-northeast-2.amazonaws.com/original/it_university_of_copenhagen/logo.png", - "https://solid-connection.s3.ap-northeast-2.amazonaws.com/original/it_university_of_copenhagen/1.png", - null, 덴마크, 유럽 - )); - - 유럽_오스트리아_그라츠대학 = universityRepository.save(new University( - null, "그라츠 대학", "University of Graz", "university_of_graz", - "https://www.uni-graz.at/en/", - "https://static.uni-graz.at/fileadmin/veranstaltungen/orientation/documents/incstud_application-courses.pdf", - "https://orientation.uni-graz.at/de/planning-the-arrival/accommodation/", - "https://solid-connection.s3.ap-northeast-2.amazonaws.com/original/university_of_graz/logo.png", - "https://solid-connection.s3.ap-northeast-2.amazonaws.com/original/university_of_graz/1.png", - null, 오스트리아, 유럽 - )); - - 유럽_오스트리아_그라츠공과대학 = universityRepository.save(new University( - null, "그라츠공과대학", "Graz University of Technology", "graz_university_of_technology", - "https://www.tugraz.at/en/home", null, - "https://www.tugraz.at/en/studying-and-teaching/studying-internationally/incoming-students-exchange-at-tu-graz/your-stay-at-tu-graz/preparation#c75033", - "https://solid-connection.s3.ap-northeast-2.amazonaws.com/original/graz_university_of_technology/logo.png", - "https://solid-connection.s3.ap-northeast-2.amazonaws.com/original/graz_university_of_technology/1.png", - null, 오스트리아, 유럽 - )); - - 유럽_오스트리아_린츠_카톨릭대학 = universityRepository.save(new University( - null, "린츠 카톨릭 대학교", "Catholic Private University Linz", "catholic_private_university_linz", - "https://ku-linz.at/en", null, - "https://ku-linz.at/en/ku_international/incomings/kulis", - "https://solid-connection.s3.ap-northeast-2.amazonaws.com/original/catholic_private_university_linz/logo.png", - "https://solid-connection.s3.ap-northeast-2.amazonaws.com/original/catholic_private_university_linz/1.png", - null, 오스트리아, 유럽 - )); - - 아시아_일본_메이지대학 = universityRepository.save(new University( - null, "메이지대학", "Meiji University", "meiji_university", - "https://www.meiji.ac.jp/cip/english/admissions/co7mm90000000461-att/co7mm900000004fa.pdf", null, - "https://www.meiji.ac.jp/cip/english/admissions/co7mm90000000461-att/co7mm900000004fa.pdf", - "https://solid-connection.s3.ap-northeast-2.amazonaws.com/original/meiji_university/logo.png", - "https://solid-connection.s3.ap-northeast-2.amazonaws.com/original/meiji_university/1.png", - null, 일본, 아시아 - )); - - 괌대학_A_지원_정보 = universityInfoForApplyRepository.save(new UniversityInfoForApply( - null, term, "괌대학(A형)", 1, HOME_UNIVERSITY_PAYMENT, ONE_SEMESTER, - "1", "detailsForLanguage", "gpaRequirement", - "gpaRequirementCriteria", "detailsForApply", "detailsForMajor", - "detailsForAccommodation", "detailsForEnglishCourse", "details", - new HashSet<>(), 영미권_미국_괌대학 - )); - - 괌대학_B_지원_정보 = universityInfoForApplyRepository.save(new UniversityInfoForApply( - null, term, "괌대학(B형)", 1, HOME_UNIVERSITY_PAYMENT, ONE_SEMESTER, - "1", "detailsForLanguage", "gpaRequirement", - "gpaRequirementCriteria", "detailsForApply", "detailsForMajor", - "detailsForAccommodation", "detailsForEnglishCourse", "details", - new HashSet<>(), 영미권_미국_괌대학 - )); - - 네바다주립대학_라스베이거스_지원_정보 = universityInfoForApplyRepository.save(new UniversityInfoForApply( - null, term, "네바다주립대학 라스베이거스(B형)", 1, HOME_UNIVERSITY_PAYMENT, ONE_SEMESTER, - "1", "detailsForLanguage", "gpaRequirement", - "gpaRequirementCriteria", "detailsForApply", "detailsForMajor", - "detailsForAccommodation", "detailsForEnglishCourse", "details", - new HashSet<>(), 영미권_미국_네바다주립대학_라스베이거스 - )); - - 메모리얼대학_세인트존스_A_지원_정보 = universityInfoForApplyRepository.save(new UniversityInfoForApply( - null, term, "메모리얼 대학 세인트존스(A형)", 1, HOME_UNIVERSITY_PAYMENT, ONE_SEMESTER, - "1", "detailsForLanguage", "gpaRequirement", - "gpaRequirementCriteria", "detailsForApply", "detailsForMajor", - "detailsForAccommodation", "detailsForEnglishCourse", "details", - new HashSet<>(), 영미권_캐나다_메모리얼대학_세인트존스 - )); - - 서던덴마크대학교_지원_정보 = universityInfoForApplyRepository.save(new UniversityInfoForApply( - null, term, "서던덴마크대학교", 1, HOME_UNIVERSITY_PAYMENT, ONE_SEMESTER, - "1", "detailsForLanguage", "gpaRequirement", - "gpaRequirementCriteria", "detailsForApply", "detailsForMajor", - "detailsForAccommodation", "detailsForEnglishCourse", "details", - new HashSet<>(), 유럽_덴마크_서던덴마크대학교 - )); - - 코펜하겐IT대학_지원_정보 = universityInfoForApplyRepository.save(new UniversityInfoForApply( - null, term, "코펜하겐 IT대학", 1, HOME_UNIVERSITY_PAYMENT, ONE_SEMESTER, - "1", "detailsForLanguage", "gpaRequirement", - "gpaRequirementCriteria", "detailsForApply", "detailsForMajor", - "detailsForAccommodation", "detailsForEnglishCourse", "details", - new HashSet<>(), 유럽_덴마크_코펜하겐IT대학 - )); - - 그라츠대학_지원_정보 = universityInfoForApplyRepository.save(new UniversityInfoForApply( - null, term, "그라츠 대학", 1, HOME_UNIVERSITY_PAYMENT, ONE_SEMESTER, - "1", "detailsForLanguage", "gpaRequirement", - "gpaRequirementCriteria", "detailsForApply", "detailsForMajor", - "detailsForAccommodation", "detailsForEnglishCourse", "details", - new HashSet<>(), 유럽_오스트리아_그라츠대학 - )); - - 그라츠공과대학_지원_정보 = universityInfoForApplyRepository.save(new UniversityInfoForApply( - null, term, "그라츠공과대학", 1, HOME_UNIVERSITY_PAYMENT, ONE_SEMESTER, - "1", "detailsForLanguage", "gpaRequirement", - "gpaRequirementCriteria", "detailsForApply", "detailsForMajor", - "detailsForAccommodation", "detailsForEnglishCourse", "details", - new HashSet<>(), 유럽_오스트리아_그라츠공과대학 - )); - - 린츠_카톨릭대학_지원_정보 = universityInfoForApplyRepository.save(new UniversityInfoForApply( - null, term, "린츠 카톨릭 대학교", 1, HOME_UNIVERSITY_PAYMENT, ONE_SEMESTER, - "1", "detailsForLanguage", "gpaRequirement", - "gpaRequirementCriteria", "detailsForApply", "detailsForMajor", - "detailsForAccommodation", "detailsForEnglishCourse", "details", - new HashSet<>(), 유럽_오스트리아_린츠_카톨릭대학 - )); - - 메이지대학_지원_정보 = universityInfoForApplyRepository.save(new UniversityInfoForApply( - null, term, "메이지대학", 1, HOME_UNIVERSITY_PAYMENT, ONE_SEMESTER, - "1", "detailsForLanguage", "gpaRequirement", - "gpaRequirementCriteria", "detailsForApply", "detailsForMajor", - "detailsForAccommodation", "detailsForEnglishCourse", "details", - new HashSet<>(), 아시아_일본_메이지대학 - )); - - saveLanguageTestRequirement(괌대학_A_지원_정보, LanguageTestType.TOEFL_IBT, "80"); - saveLanguageTestRequirement(괌대학_A_지원_정보, LanguageTestType.TOEIC, "800"); - saveLanguageTestRequirement(괌대학_B_지원_정보, LanguageTestType.TOEFL_IBT, "70"); - saveLanguageTestRequirement(괌대학_B_지원_정보, LanguageTestType.TOEIC, "900"); - saveLanguageTestRequirement(네바다주립대학_라스베이거스_지원_정보, LanguageTestType.TOEIC, "800"); - saveLanguageTestRequirement(메모리얼대학_세인트존스_A_지원_정보, LanguageTestType.TOEIC, "800"); - saveLanguageTestRequirement(서던덴마크대학교_지원_정보, LanguageTestType.TOEFL_IBT, "70"); - saveLanguageTestRequirement(코펜하겐IT대학_지원_정보, LanguageTestType.TOEFL_IBT, "80"); - saveLanguageTestRequirement(그라츠대학_지원_정보, LanguageTestType.TOEFL_IBT, "80"); - saveLanguageTestRequirement(그라츠공과대학_지원_정보, LanguageTestType.TOEIC, "800"); - saveLanguageTestRequirement(린츠_카톨릭대학_지원_정보, LanguageTestType.TOEIC, "800"); - saveLanguageTestRequirement(메이지대학_지원_정보, LanguageTestType.JLPT, "N2"); - } - - private void saveLanguageTestRequirement( - UniversityInfoForApply universityInfoForApply, LanguageTestType testType, String minScore) { - LanguageRequirement languageRequirement = new LanguageRequirement( - null, - testType, - minScore, - universityInfoForApply); - universityInfoForApply.addLanguageRequirements(languageRequirement); - universityInfoForApplyRepository.save(universityInfoForApply); - languageRequirementRepository.save(languageRequirement); - } -} diff --git a/src/test/java/com/example/solidconnection/e2e/UniversityDetailTest.java b/src/test/java/com/example/solidconnection/e2e/UniversityDetailTest.java deleted file mode 100644 index c7a364ebf..000000000 --- a/src/test/java/com/example/solidconnection/e2e/UniversityDetailTest.java +++ /dev/null @@ -1,86 +0,0 @@ -package com.example.solidconnection.e2e; - -import com.example.solidconnection.auth.service.AuthTokenProvider; -import com.example.solidconnection.siteuser.domain.SiteUser; -import com.example.solidconnection.siteuser.repository.SiteUserRepository; -import com.example.solidconnection.university.dto.LanguageRequirementResponse; -import com.example.solidconnection.university.dto.UniversityDetailResponse; -import io.restassured.RestAssured; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.HttpStatus; - -import static com.example.solidconnection.e2e.DynamicFixture.createSiteUserByEmail; -import static org.assertj.core.api.Assertions.assertThat; - -@DisplayName("대학교 상세 조회 테스트") -class UniversityDetailTest extends UniversityDataSetUpEndToEndTest { - - @Autowired - private SiteUserRepository siteUserRepository; - - @Autowired - private AuthTokenProvider authTokenProvider; - - private String accessToken; - - @BeforeEach - public void setUpUserAndToken() { - // setUp - 회원 정보 저장 - String email = "email@email.com"; - SiteUser siteUser = createSiteUserByEmail(email); - siteUserRepository.save(siteUser); - - // setUp - 엑세스 토큰 생성과 리프레시 토큰 생성 및 저장 - accessToken = authTokenProvider.generateAccessToken(siteUser); - authTokenProvider.generateAndSaveRefreshToken(siteUser); - } - - @Test - void 대학교_정보를_조회한다() { - // request - 요청 - UniversityDetailResponse response = RestAssured.given() - .header("Authorization", "Bearer " + accessToken) - .log().all() - .get("/universities/" + 메이지대학_지원_정보.getId()) - .then().log().all() - .statusCode(HttpStatus.OK.value()) - .extract().as(UniversityDetailResponse.class); - - // response - 응답 - Assertions.assertAll( - () -> assertThat(response.id()).isEqualTo(메이지대학_지원_정보.getId()), - () -> assertThat(response.koreanName()).isEqualTo(메이지대학_지원_정보.getKoreanName()), - () -> assertThat(response.englishName()).isEqualTo(아시아_일본_메이지대학.getEnglishName()), - () -> assertThat(response.region()).isEqualTo(아시아_일본_메이지대학.getRegion().getKoreanName()), - () -> assertThat(response.country()).isEqualTo(아시아_일본_메이지대학.getCountry().getKoreanName()), - () -> assertThat(response.languageRequirements()).isEqualTo( - 메이지대학_지원_정보.getLanguageRequirements().stream() - .map(LanguageRequirementResponse::from) - .toList()), - () -> assertThat(response.term()).isEqualTo(메이지대학_지원_정보.getTerm()), - () -> assertThat(response.formatName()).isEqualTo(아시아_일본_메이지대학.getFormatName()), - () -> assertThat(response.homepageUrl()).isEqualTo(아시아_일본_메이지대학.getHomepageUrl()), - () -> assertThat(response.logoImageUrl()).isEqualTo(아시아_일본_메이지대학.getLogoImageUrl()), - () -> assertThat(response.backgroundImageUrl()).isEqualTo(아시아_일본_메이지대학.getBackgroundImageUrl()), - () -> assertThat(response.detailsForLocal()).isEqualTo(아시아_일본_메이지대학.getDetailsForLocal()), - () -> assertThat(response.studentCapacity()).isEqualTo(메이지대학_지원_정보.getStudentCapacity()), - () -> assertThat(response.tuitionFeeType()).isEqualTo(메이지대학_지원_정보.getTuitionFeeType().getKoreanName()), - () -> assertThat(response.semesterAvailableForDispatch()).isEqualTo(메이지대학_지원_정보.getSemesterAvailableForDispatch().getKoreanName()), - () -> assertThat(response.detailsForLanguage()).isEqualTo(메이지대학_지원_정보.getDetailsForLanguage()), - () -> assertThat(response.gpaRequirement()).isEqualTo(메이지대학_지원_정보.getGpaRequirement()), - () -> assertThat(response.gpaRequirementCriteria()).isEqualTo(메이지대학_지원_정보.getGpaRequirementCriteria()), - () -> assertThat(response.semesterRequirement()).isEqualTo(메이지대학_지원_정보.getSemesterRequirement()), - () -> assertThat(response.detailsForApply()).isEqualTo(메이지대학_지원_정보.getDetailsForApply()), - () -> assertThat(response.detailsForMajor()).isEqualTo(메이지대학_지원_정보.getDetailsForMajor()), - () -> assertThat(response.detailsForAccommodation()).isEqualTo(메이지대학_지원_정보.getDetailsForAccommodation()), - () -> assertThat(response.detailsForEnglishCourse()).isEqualTo(메이지대학_지원_정보.getDetailsForEnglishCourse()), - () -> assertThat(response.details()).isEqualTo(메이지대학_지원_정보.getDetails()), - () -> assertThat(response.accommodationUrl()).isEqualTo(아시아_일본_메이지대학.getAccommodationUrl()), - () -> assertThat(response.englishCourseUrl()).isEqualTo(아시아_일본_메이지대학.getEnglishCourseUrl()) - ); - } -} diff --git a/src/test/java/com/example/solidconnection/e2e/UniversityLikeTest.java b/src/test/java/com/example/solidconnection/e2e/UniversityLikeTest.java deleted file mode 100644 index 693d6d91b..000000000 --- a/src/test/java/com/example/solidconnection/e2e/UniversityLikeTest.java +++ /dev/null @@ -1,123 +0,0 @@ -package com.example.solidconnection.e2e; - -import com.example.solidconnection.auth.service.AuthTokenProvider; -import com.example.solidconnection.siteuser.domain.SiteUser; -import com.example.solidconnection.siteuser.repository.LikedUniversityRepository; -import com.example.solidconnection.siteuser.repository.SiteUserRepository; -import com.example.solidconnection.university.domain.LikedUniversity; -import com.example.solidconnection.university.domain.UniversityInfoForApply; -import com.example.solidconnection.university.dto.IsLikeResponse; -import com.example.solidconnection.university.dto.LikeResultResponse; -import com.example.solidconnection.university.dto.UniversityInfoForApplyPreviewResponse; -import com.example.solidconnection.university.repository.UniversityInfoForApplyRepository; -import io.restassured.RestAssured; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.HttpStatus; - -import java.util.List; -import java.util.Optional; -import java.util.Set; - -import static com.example.solidconnection.e2e.DynamicFixture.createLikedUniversity; -import static com.example.solidconnection.e2e.DynamicFixture.createSiteUserByEmail; -import static com.example.solidconnection.e2e.DynamicFixture.createUniversityForApply; -import static com.example.solidconnection.university.service.UniversityLikeService.LIKE_SUCCESS_MESSAGE; -import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.assertAll; - -@DisplayName("대학교 좋아요 테스트") -class UniversityLikeTest extends UniversityDataSetUpEndToEndTest { - - @Autowired - private SiteUserRepository siteUserRepository; - - @Autowired - private UniversityInfoForApplyRepository universityInfoForApplyRepository; - - @Autowired - private LikedUniversityRepository likedUniversityRepository; - - @Autowired - private AuthTokenProvider authTokenProvider; - - private String accessToken; - private SiteUser siteUser; - - @BeforeEach - public void setUpUserAndToken() { - // setUp - 회원 정보 저장 - siteUser = createSiteUserByEmail("email@email.com"); - siteUserRepository.save(siteUser); - - // setUp - 엑세스 토큰 생성과 리프레시 토큰 생성 및 저장 - accessToken = authTokenProvider.generateAccessToken(siteUser); - authTokenProvider.generateAndSaveRefreshToken(siteUser); - } - - @Test - void 좋아요를_한_대학을_조회한다() { - // setUp - 대학교 좋아요 저장 - UniversityInfoForApply differentTermUniversityInfoForApply = - createUniversityForApply(term + " 추가 지원", 영미권_미국_괌대학, null); - universityInfoForApplyRepository.save(differentTermUniversityInfoForApply); - likedUniversityRepository.saveAll(Set.of( - createLikedUniversity(siteUser, 괌대학_A_지원_정보), - createLikedUniversity(siteUser, differentTermUniversityInfoForApply) - )); - - // request - 요청 - List wishUniversities = RestAssured.given() - .header("Authorization", "Bearer " + accessToken) - .log().all() - .get("/universities/like") - .then().log().all() - .statusCode(HttpStatus.OK.value()) - .extract().jsonPath().getList(".", UniversityInfoForApplyPreviewResponse.class); - - List wishUniversitiesId = wishUniversities.stream() - .map(UniversityInfoForApplyPreviewResponse::id) - .toList(); - assertThat(wishUniversitiesId) - .as("좋아요한 대학교를 지원 시기와 관계 없이 불러온다.") - .containsExactlyInAnyOrder(괌대학_A_지원_정보.getId(), differentTermUniversityInfoForApply.getId()); - } - - @Test - void 좋아요_하지_않은_대학교에_좋아요를_누른다() { - // request - 요청 - LikeResultResponse response = RestAssured.given() - .header("Authorization", "Bearer " + accessToken) - .log().all() - .post("/universities/" + 괌대학_A_지원_정보.getId() + "/like") - .then().log().all() - .statusCode(HttpStatus.OK.value()) - .extract().as(LikeResultResponse.class); - - Optional likedUniversity - = likedUniversityRepository.findAllBySiteUser_Id(siteUser.getId()).stream().findFirst(); - assertAll("좋아요 누른 대학교를 저장하고 좋아요 성공 응답을 반환한다.", - () -> assertThat(likedUniversity).isPresent(), - () -> assertThat(likedUniversity.get().getId()).isEqualTo(괌대학_A_지원_정보.getId()), - () -> assertThat(response.result()).isEqualTo(LIKE_SUCCESS_MESSAGE) - ); - } - - @Test - void 대학의_좋아요_여부를_조회한다() { - // setUp - 대학교 좋아요 저장 - likedUniversityRepository.save(createLikedUniversity(siteUser, 괌대학_A_지원_정보)); - - // request - 요청 - IsLikeResponse response = RestAssured.given().log().all() - .header("Authorization", "Bearer " + accessToken) - .get("/universities/" + 괌대학_A_지원_정보.getId() + "/like") - .then().log().all() - .statusCode(HttpStatus.OK.value()) - .extract().as(IsLikeResponse.class); - - assertThat(response.isLike()).isTrue(); - } -} diff --git a/src/test/java/com/example/solidconnection/e2e/UniversityRecommendTest.java b/src/test/java/com/example/solidconnection/e2e/UniversityRecommendTest.java deleted file mode 100644 index 9939d1a54..000000000 --- a/src/test/java/com/example/solidconnection/e2e/UniversityRecommendTest.java +++ /dev/null @@ -1,191 +0,0 @@ -package com.example.solidconnection.e2e; - -import com.example.solidconnection.auth.service.AuthTokenProvider; -import com.example.solidconnection.entity.InterestedCountry; -import com.example.solidconnection.entity.InterestedRegion; -import com.example.solidconnection.repositories.InterestedCountyRepository; -import com.example.solidconnection.repositories.InterestedRegionRepository; -import com.example.solidconnection.siteuser.domain.SiteUser; -import com.example.solidconnection.siteuser.repository.SiteUserRepository; -import com.example.solidconnection.university.dto.UniversityInfoForApplyPreviewResponse; -import com.example.solidconnection.university.dto.UniversityRecommendsResponse; -import com.example.solidconnection.university.service.GeneralUniversityRecommendService; -import io.restassured.RestAssured; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.HttpStatus; - -import java.util.List; - -import static com.example.solidconnection.e2e.DynamicFixture.createSiteUserByEmail; -import static com.example.solidconnection.university.service.UniversityRecommendService.RECOMMEND_UNIVERSITY_NUM; -import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.assertAll; - -@DisplayName("추천 대학 목록 조회 테스트") -class UniversityRecommendTest extends UniversityDataSetUpEndToEndTest { - - @Autowired - private SiteUserRepository siteUserRepository; - - @Autowired - private InterestedRegionRepository interestedRegionRepository; - - @Autowired - private InterestedCountyRepository interestedCountyRepository; - - @Autowired - private AuthTokenProvider authTokenProvider; - - @Autowired - private GeneralUniversityRecommendService generalUniversityRecommendService; - - private SiteUser siteUser; - private String accessToken; - - @BeforeEach - void setUp() { - // setUp - 회원 정보 저장 - String email = "email@email.com"; - siteUser = siteUserRepository.save(createSiteUserByEmail(email)); - generalUniversityRecommendService.init(); - - // setUp - 엑세스 토큰 생성과 리프레시 토큰 생성 및 저장 - accessToken = authTokenProvider.generateAccessToken(siteUser); - authTokenProvider.generateAndSaveRefreshToken(siteUser); - } - - @Test - void 관심_지역을_설정한_사용자의_추천_대학_목록을_조회한다() { - // setUp - 관심 지역 저장 - interestedRegionRepository.save(new InterestedRegion(siteUser, 영미권)); - - // request - 요청 - UniversityRecommendsResponse response = RestAssured.given() - .header("Authorization", "Bearer " + accessToken) - .log().all() - .get("/universities/recommend") - .then().log().all() - .statusCode(HttpStatus.OK.value()) - .extract().as(UniversityRecommendsResponse.class); - - assertAll( - String.format("관심 지역에 해당하는 학교를 포함한 %d개의 대학 목록을 반환한다.", RECOMMEND_UNIVERSITY_NUM), - () -> assertThat(response.recommendedUniversities()) - .hasSize(RECOMMEND_UNIVERSITY_NUM), - () -> assertThat(response.recommendedUniversities()) - .containsOnlyOnceElementsOf(List.of( - UniversityInfoForApplyPreviewResponse.from(괌대학_A_지원_정보), - UniversityInfoForApplyPreviewResponse.from(괌대학_B_지원_정보), - UniversityInfoForApplyPreviewResponse.from(메모리얼대학_세인트존스_A_지원_정보), - UniversityInfoForApplyPreviewResponse.from(네바다주립대학_라스베이거스_지원_정보) - )) - ); - } - - @Test - void 관심_국가를_설정한_사용자의_추천_대학_목록을_조회한다() { - // setUp - 관심 국가 저장 - interestedCountyRepository.save(new InterestedCountry(siteUser, 덴마크)); - - // request - 요청 - UniversityRecommendsResponse response = RestAssured.given() - .header("Authorization", "Bearer " + accessToken) - .log().all() - .get("/universities/recommend") - .then().log().all() - .statusCode(HttpStatus.OK.value()) - .extract().as(UniversityRecommendsResponse.class); - - assertAll( - String.format("관심 국가에 해당하는 학교를 포함한 %d개의 대학 목록을 반환한다.", RECOMMEND_UNIVERSITY_NUM), - () -> assertThat(response.recommendedUniversities()) - .hasSize(RECOMMEND_UNIVERSITY_NUM), - () -> assertThat(response.recommendedUniversities()) - .containsOnlyOnceElementsOf(List.of( - UniversityInfoForApplyPreviewResponse.from(서던덴마크대학교_지원_정보), - UniversityInfoForApplyPreviewResponse.from(코펜하겐IT대학_지원_정보) - )) - ); - } - - @Test - void 관심_지역과_관심_국가를_설정한_사용자의_추천_대학_목록을_조회한다() { - // setUp - 관심 지역과 국가 저장 - interestedRegionRepository.save(new InterestedRegion(siteUser, 영미권)); - interestedCountyRepository.save(new InterestedCountry(siteUser, 덴마크)); - - // request - 요청 - UniversityRecommendsResponse response = RestAssured.given() - .header("Authorization", "Bearer " + accessToken) - .log().all() - .get("/universities/recommend") - .then().log().all() - .statusCode(HttpStatus.OK.value()) - .extract().as(UniversityRecommendsResponse.class); - - assertAll( - String.format("관심 지역 또는 국가에 해당하는 학교를 포함한 %d개의 대학 목록을 반환한다.", RECOMMEND_UNIVERSITY_NUM), - () -> assertThat(response.recommendedUniversities()) - .hasSize(RECOMMEND_UNIVERSITY_NUM), - () -> assertThat(response.recommendedUniversities()) - .containsOnlyOnceElementsOf(List.of( - UniversityInfoForApplyPreviewResponse.from(괌대학_A_지원_정보), - UniversityInfoForApplyPreviewResponse.from(괌대학_B_지원_정보), - UniversityInfoForApplyPreviewResponse.from(메모리얼대학_세인트존스_A_지원_정보), - UniversityInfoForApplyPreviewResponse.from(네바다주립대학_라스베이거스_지원_정보), - UniversityInfoForApplyPreviewResponse.from(서던덴마크대학교_지원_정보), - UniversityInfoForApplyPreviewResponse.from(코펜하겐IT대학_지원_정보) - )) - ); - } - - @Test - void 관심_지역_또는_관심_국가를_설정하지_않은_사용자의_추천_대학_목록을_조회한다() { - // request - 요청 - UniversityRecommendsResponse response = RestAssured.given() - .header("Authorization", "Bearer " + accessToken) - .log().all() - .get("/universities/recommend") - .then().log().all() - .statusCode(HttpStatus.OK.value()) - .extract().as(UniversityRecommendsResponse.class); - - List generalRecommendUniversities - = this.generalUniversityRecommendService.getRecommendUniversities().stream() - .map(UniversityInfoForApplyPreviewResponse::from) - .toList(); - assertAll( - String.format("일반 추천 대학 목록 %d개를 반환한다.", RECOMMEND_UNIVERSITY_NUM), - () -> assertThat(response.recommendedUniversities()) - .hasSize(RECOMMEND_UNIVERSITY_NUM), - () -> assertThat(generalRecommendUniversities) - .containsOnlyOnceElementsOf(response.recommendedUniversities()) - ); - } - - @Test - void 로그인하지_않은_방문객의_추천_대학_목록을_조회한다() { - // request - 요청 - UniversityRecommendsResponse response = RestAssured.given() - .log().all() - .get("/universities/recommend") - .then().log().all() - .statusCode(HttpStatus.OK.value()) - .extract().as(UniversityRecommendsResponse.class); - - List generalRecommendUniversities - = this.generalUniversityRecommendService.getRecommendUniversities().stream() - .map(UniversityInfoForApplyPreviewResponse::from) - .toList(); - assertAll( - String.format("일반 추천 대학 목록 %d개를 반환한다.", RECOMMEND_UNIVERSITY_NUM), - () -> assertThat(response.recommendedUniversities()) - .hasSize(RECOMMEND_UNIVERSITY_NUM), - () -> assertThat(generalRecommendUniversities) - .containsOnlyOnceElementsOf(response.recommendedUniversities()) - ); - } -} diff --git a/src/test/java/com/example/solidconnection/e2e/UniversitySearchTest.java b/src/test/java/com/example/solidconnection/e2e/UniversitySearchTest.java deleted file mode 100644 index 5d4ff71fd..000000000 --- a/src/test/java/com/example/solidconnection/e2e/UniversitySearchTest.java +++ /dev/null @@ -1,166 +0,0 @@ -package com.example.solidconnection.e2e; - -import com.example.solidconnection.auth.service.AuthTokenProvider; -import com.example.solidconnection.siteuser.domain.SiteUser; -import com.example.solidconnection.siteuser.repository.SiteUserRepository; -import com.example.solidconnection.university.dto.UniversityInfoForApplyPreviewResponse; -import io.restassured.RestAssured; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; - -import java.util.List; - -import static com.example.solidconnection.e2e.DynamicFixture.createSiteUserByEmail; -import static org.assertj.core.api.Assertions.assertThat; - -@DisplayName("대학교 검색 테스트") -class UniversitySearchTest extends UniversityDataSetUpEndToEndTest { - - @Autowired - private SiteUserRepository siteUserRepository; - - @Autowired - private AuthTokenProvider authTokenProvider; - - private String accessToken; - private SiteUser siteUser; - - @BeforeEach - public void setUpUserAndToken() { - // setUp - 회원 정보 저장 - siteUser = createSiteUserByEmail("email@email.com"); - siteUserRepository.save(siteUser); - - // setUp - 엑세스 토큰 생성과 리프레시 토큰 생성 및 저장 - accessToken = authTokenProvider.generateAccessToken(siteUser); - authTokenProvider.generateAndSaveRefreshToken(siteUser); - } - - @Test - void 아무_필터링_없이_전체_대학을_조회한다() { - // request - 요청 - List response = RestAssured.given().log().all() - .header("Authorization", "Bearer " + accessToken) - .when().get("/universities/search") - .then().log().all() - .statusCode(200) - .extract().jsonPath().getList(".", UniversityInfoForApplyPreviewResponse.class); - - assertThat(response).containsExactlyInAnyOrder( - UniversityInfoForApplyPreviewResponse.from(괌대학_A_지원_정보), - UniversityInfoForApplyPreviewResponse.from(괌대학_B_지원_정보), - UniversityInfoForApplyPreviewResponse.from(네바다주립대학_라스베이거스_지원_정보), - UniversityInfoForApplyPreviewResponse.from(메모리얼대학_세인트존스_A_지원_정보), - UniversityInfoForApplyPreviewResponse.from(서던덴마크대학교_지원_정보), - UniversityInfoForApplyPreviewResponse.from(코펜하겐IT대학_지원_정보), - UniversityInfoForApplyPreviewResponse.from(그라츠대학_지원_정보), - UniversityInfoForApplyPreviewResponse.from(그라츠공과대학_지원_정보), - UniversityInfoForApplyPreviewResponse.from(린츠_카톨릭대학_지원_정보), - UniversityInfoForApplyPreviewResponse.from(메이지대학_지원_정보) - ); - } - - @Test - void 지역으로_필터링한_대학을_조회한다() { - // request - 요청 - List response = RestAssured.given().log().all() - .header("Authorization", "Bearer " + accessToken) - .when().get("/universities/search?region=" + 영미권.getCode()) - .then().log().all() - .statusCode(200) - .extract().jsonPath().getList(".", UniversityInfoForApplyPreviewResponse.class); - - assertThat(response).containsExactlyInAnyOrder( - UniversityInfoForApplyPreviewResponse.from(괌대학_A_지원_정보), - UniversityInfoForApplyPreviewResponse.from(괌대학_B_지원_정보), - UniversityInfoForApplyPreviewResponse.from(네바다주립대학_라스베이거스_지원_정보), - UniversityInfoForApplyPreviewResponse.from(메모리얼대학_세인트존스_A_지원_정보) - ); - } - - @Test - void 국가_국문명_또는_대학_국문명으로_필터링한_대학을_조회한다() { - // request - 요청 - List response = RestAssured.given().log().all() - .header("Authorization", "Bearer " + accessToken) - .when().get("/universities/search?keyword=라") - .then().log().all() - .statusCode(200) - .extract().jsonPath().getList(".", UniversityInfoForApplyPreviewResponse.class); - - assertThat(response).containsExactlyInAnyOrder( - UniversityInfoForApplyPreviewResponse.from(네바다주립대학_라스베이거스_지원_정보), - UniversityInfoForApplyPreviewResponse.from(그라츠대학_지원_정보), - UniversityInfoForApplyPreviewResponse.from(그라츠공과대학_지원_정보) - ); - } - - @Test - void 둘_이상의_국가_국문명_또는_대학_국문명으로_필터링한_대학을_조회한다() { - // request - 요청 - List response = RestAssured.given().log().all() - .header("Authorization", "Bearer " + accessToken) - .when().get("/universities/search?keyword=라&keyword=일본") - .then().log().all() - .statusCode(200) - .extract().jsonPath().getList(".", UniversityInfoForApplyPreviewResponse.class); - - assertThat(response).containsExactlyInAnyOrder( - UniversityInfoForApplyPreviewResponse.from(네바다주립대학_라스베이거스_지원_정보), - UniversityInfoForApplyPreviewResponse.from(그라츠대학_지원_정보), - UniversityInfoForApplyPreviewResponse.from(그라츠공과대학_지원_정보), - UniversityInfoForApplyPreviewResponse.from(메이지대학_지원_정보) - ); - } - - @Test - void 어학시험_종류로_필터링한_대학을_조회한다() { - // request - 요청 - List response = RestAssured.given().log().all() - .header("Authorization", "Bearer " + accessToken) - .when().get("/universities/search?testType=TOEFL_IBT") - .then().log().all() - .statusCode(200) - .extract().jsonPath().getList(".", UniversityInfoForApplyPreviewResponse.class); - - assertThat(response).containsExactlyInAnyOrder( - UniversityInfoForApplyPreviewResponse.from(괌대학_A_지원_정보), - UniversityInfoForApplyPreviewResponse.from(괌대학_B_지원_정보), - UniversityInfoForApplyPreviewResponse.from(서던덴마크대학교_지원_정보), - UniversityInfoForApplyPreviewResponse.from(코펜하겐IT대학_지원_정보), - UniversityInfoForApplyPreviewResponse.from(그라츠대학_지원_정보) - ); - } - - @Test - void 어학시험과_시험_성적으로_필터링한_대학을_조회한다() { - // request - 요청 - List response = RestAssured.given().log().all() - .header("Authorization", "Bearer " + accessToken) - .when().get("/universities/search?testType=TOEFL_IBT&testScore=70") - .then().log().all() - .statusCode(200) - .extract().jsonPath().getList(".", UniversityInfoForApplyPreviewResponse.class); - - assertThat(response).containsExactlyInAnyOrder( - UniversityInfoForApplyPreviewResponse.from(괌대학_B_지원_정보), - UniversityInfoForApplyPreviewResponse.from(서던덴마크대학교_지원_정보) - ); - } - - @Test - void 지역과_어학시험과_시험_성적으로_필터링한_대학을_조회한다() { - // request - 요청 - List response = RestAssured.given().log().all() - .header("Authorization", "Bearer " + accessToken) - .when().get("/universities/search?region=EUROPE&testType=TOEFL_IBT&testScore=70") - .then().log().all() - .statusCode(200) - .extract().jsonPath().getList(".", UniversityInfoForApplyPreviewResponse.class); - - assertThat(response) - .containsExactlyInAnyOrder(UniversityInfoForApplyPreviewResponse.from(서던덴마크대학교_지원_정보)); - } -} diff --git a/src/test/java/com/example/solidconnection/score/service/ScoreServiceTest.java b/src/test/java/com/example/solidconnection/score/service/ScoreServiceTest.java index 8d2054579..a8b1ac3d8 100644 --- a/src/test/java/com/example/solidconnection/score/service/ScoreServiceTest.java +++ b/src/test/java/com/example/solidconnection/score/service/ScoreServiceTest.java @@ -17,7 +17,6 @@ import com.example.solidconnection.siteuser.domain.SiteUser; import com.example.solidconnection.siteuser.repository.SiteUserRepository; import com.example.solidconnection.support.integration.BaseIntegrationTest; -import com.example.solidconnection.type.Gender; import com.example.solidconnection.type.ImgType; import com.example.solidconnection.type.LanguageTestType; import com.example.solidconnection.type.PreparationStatus; @@ -173,10 +172,8 @@ private SiteUser createSiteUser() { "test@example.com", "nickname", "profileImageUrl", - "1999-01-01", PreparationStatus.CONSIDERING, - Role.MENTEE, - Gender.MALE + Role.MENTEE ); return siteUserRepository.save(siteUser); } diff --git a/src/test/java/com/example/solidconnection/siteuser/repository/SiteUserRepositoryTest.java b/src/test/java/com/example/solidconnection/siteuser/repository/SiteUserRepositoryTest.java index d3433937a..c3d9d240e 100644 --- a/src/test/java/com/example/solidconnection/siteuser/repository/SiteUserRepositoryTest.java +++ b/src/test/java/com/example/solidconnection/siteuser/repository/SiteUserRepositoryTest.java @@ -3,7 +3,6 @@ import com.example.solidconnection.siteuser.domain.AuthType; import com.example.solidconnection.siteuser.domain.SiteUser; import com.example.solidconnection.support.TestContainerDataJpaTest; -import com.example.solidconnection.type.Gender; import com.example.solidconnection.type.PreparationStatus; import com.example.solidconnection.type.Role; import org.junit.jupiter.api.Nested; @@ -52,10 +51,8 @@ private SiteUser createSiteUser(String email, AuthType authType) { email, "nickname", "profileImageUrl", - "1999-01-01", PreparationStatus.CONSIDERING, Role.MENTEE, - Gender.MALE, authType ); } diff --git a/src/test/java/com/example/solidconnection/siteuser/service/MyPageServiceTest.java b/src/test/java/com/example/solidconnection/siteuser/service/MyPageServiceTest.java index 334b6f740..95a887736 100644 --- a/src/test/java/com/example/solidconnection/siteuser/service/MyPageServiceTest.java +++ b/src/test/java/com/example/solidconnection/siteuser/service/MyPageServiceTest.java @@ -9,7 +9,6 @@ import com.example.solidconnection.siteuser.repository.LikedUniversityRepository; import com.example.solidconnection.siteuser.repository.SiteUserRepository; import com.example.solidconnection.support.integration.BaseIntegrationTest; -import com.example.solidconnection.type.Gender; import com.example.solidconnection.type.ImgType; import com.example.solidconnection.type.PreparationStatus; import com.example.solidconnection.type.Role; @@ -68,7 +67,6 @@ class MyPageServiceTest extends BaseIntegrationTest { () -> assertThat(response.nickname()).isEqualTo(testUser.getNickname()), () -> assertThat(response.profileImageUrl()).isEqualTo(testUser.getProfileImageUrl()), () -> assertThat(response.role()).isEqualTo(testUser.getRole()), - () -> assertThat(response.birth()).isEqualTo(testUser.getBirth()), () -> assertThat(response.email()).isEqualTo(testUser.getEmail()), () -> assertThat(response.likedPostCount()).isEqualTo(testUser.getPostLikeList().size()), () -> assertThat(response.likedUniversityCount()).isEqualTo(likedUniversityCount) @@ -206,10 +204,8 @@ private SiteUser createSiteUser() { "test@example.com", "nickname", "profileImageUrl", - "1999-01-01", PreparationStatus.CONSIDERING, - Role.MENTEE, - Gender.MALE + Role.MENTEE ); return siteUserRepository.save(siteUser); } @@ -219,10 +215,8 @@ private SiteUser createSiteUserWithCustomProfile() { "test@example.com", "nickname", "profile/profileImageUrl", - "1999-01-01", PreparationStatus.CONSIDERING, - Role.MENTEE, - Gender.MALE + Role.MENTEE ); return siteUserRepository.save(siteUser); } @@ -232,10 +226,8 @@ private void createDuplicatedSiteUser() { "duplicated@example.com", "duplicatedNickname", "profileImageUrl", - "1999-01-01", PreparationStatus.CONSIDERING, - Role.MENTEE, - Gender.MALE + Role.MENTEE ); siteUserRepository.save(siteUser); } diff --git a/src/test/java/com/example/solidconnection/siteuser/service/SiteUserServiceTest.java b/src/test/java/com/example/solidconnection/siteuser/service/SiteUserServiceTest.java index 7272b3498..6c9736198 100644 --- a/src/test/java/com/example/solidconnection/siteuser/service/SiteUserServiceTest.java +++ b/src/test/java/com/example/solidconnection/siteuser/service/SiteUserServiceTest.java @@ -4,7 +4,6 @@ import com.example.solidconnection.siteuser.dto.NicknameExistsResponse; import com.example.solidconnection.siteuser.repository.SiteUserRepository; import com.example.solidconnection.support.integration.BaseIntegrationTest; -import com.example.solidconnection.type.Gender; import com.example.solidconnection.type.PreparationStatus; import com.example.solidconnection.type.Role; import org.junit.jupiter.api.BeforeEach; @@ -58,10 +57,8 @@ private SiteUser createSiteUser() { "test@example.com", "nickname", "profileImageUrl", - "1999-01-01", PreparationStatus.CONSIDERING, - Role.MENTEE, - Gender.MALE + Role.MENTEE ); return siteUserRepository.save(siteUser); } diff --git a/src/test/java/com/example/solidconnection/support/integration/BaseIntegrationTest.java b/src/test/java/com/example/solidconnection/support/integration/BaseIntegrationTest.java index 989e0bc31..05b101985 100644 --- a/src/test/java/com/example/solidconnection/support/integration/BaseIntegrationTest.java +++ b/src/test/java/com/example/solidconnection/support/integration/BaseIntegrationTest.java @@ -22,7 +22,6 @@ import com.example.solidconnection.siteuser.repository.SiteUserRepository; import com.example.solidconnection.support.DatabaseClearExtension; import com.example.solidconnection.support.TestContainerSpringBootTest; -import com.example.solidconnection.type.Gender; import com.example.solidconnection.type.LanguageTestType; import com.example.solidconnection.type.PostCategory; import com.example.solidconnection.type.PreparationStatus; @@ -171,73 +170,57 @@ private void setUpSiteUsers() { "test1@example.com", "nickname1", "profileImageUrl", - "1999-01-01", PreparationStatus.CONSIDERING, - Role.MENTEE, - Gender.MALE)); + Role.MENTEE)); 테스트유저_2 = siteUserRepository.save(new SiteUser( "test2@example.com", "nickname2", "profileImageUrl", - "1999-01-01", PreparationStatus.CONSIDERING, - Role.MENTEE, - Gender.FEMALE)); + Role.MENTEE)); 테스트유저_3 = siteUserRepository.save(new SiteUser( "test3@example.com", "nickname3", "profileImageUrl", - "1999-01-01", PreparationStatus.CONSIDERING, - Role.MENTEE, - Gender.MALE)); + Role.MENTEE)); 테스트유저_4 = siteUserRepository.save(new SiteUser( "test4@example.com", "nickname4", "profileImageUrl", - "1999-01-01", PreparationStatus.CONSIDERING, - Role.MENTEE, - Gender.FEMALE)); + Role.MENTEE)); 테스트유저_5 = siteUserRepository.save(new SiteUser( "test5@example.com", "nickname5", "profileImageUrl", - "1999-01-01", PreparationStatus.CONSIDERING, - Role.MENTEE, - Gender.MALE)); + Role.MENTEE)); 테스트유저_6 = siteUserRepository.save(new SiteUser( "test6@example.com", "nickname6", "profileImageUrl", - "1999-01-01", PreparationStatus.CONSIDERING, - Role.MENTEE, - Gender.FEMALE)); + Role.MENTEE)); 테스트유저_7 = siteUserRepository.save(new SiteUser( "test7@example.com", "nickname7", "profileImageUrl", - "1999-01-01", PreparationStatus.CONSIDERING, - Role.MENTEE, - Gender.FEMALE)); + Role.MENTEE)); 이전학기_지원자 = siteUserRepository.save(new SiteUser( "old@example.com", "oldNickname", "profileImageUrl", - "1999-01-01", PreparationStatus.CONSIDERING, - Role.MENTEE, - Gender.MALE)); + Role.MENTEE)); } private void setUpRegions() { @@ -525,7 +508,7 @@ private LanguageTestScore createApprovedLanguageTestScore(SiteUser siteUser) { return languageTestScoreRepository.save(languageTestScore); } - private Post createPost (Board board, SiteUser siteUser, String title, String content, PostCategory category){ + private Post createPost(Board board, SiteUser siteUser, String title, String content, PostCategory category) { Post post = new Post( title, content, diff --git a/src/test/java/com/example/solidconnection/university/service/UniversityLikeServiceTest.java b/src/test/java/com/example/solidconnection/university/service/UniversityLikeServiceTest.java index ec9b704a6..6bc3c13e3 100644 --- a/src/test/java/com/example/solidconnection/university/service/UniversityLikeServiceTest.java +++ b/src/test/java/com/example/solidconnection/university/service/UniversityLikeServiceTest.java @@ -5,7 +5,6 @@ import com.example.solidconnection.siteuser.repository.LikedUniversityRepository; import com.example.solidconnection.siteuser.repository.SiteUserRepository; import com.example.solidconnection.support.integration.BaseIntegrationTest; -import com.example.solidconnection.type.Gender; import com.example.solidconnection.type.PreparationStatus; import com.example.solidconnection.type.Role; import com.example.solidconnection.university.domain.LikedUniversity; @@ -158,10 +157,8 @@ private SiteUser createSiteUser() { "test@example.com", "nickname", "profileImageUrl", - "1999-01-01", PreparationStatus.CONSIDERING, - Role.MENTEE, - Gender.MALE + Role.MENTEE ); return siteUserRepository.save(siteUser); } diff --git a/src/test/java/com/example/solidconnection/university/service/UniversityRecommendServiceTest.java b/src/test/java/com/example/solidconnection/university/service/UniversityRecommendServiceTest.java index 102eb6dd6..11591d11f 100644 --- a/src/test/java/com/example/solidconnection/university/service/UniversityRecommendServiceTest.java +++ b/src/test/java/com/example/solidconnection/university/service/UniversityRecommendServiceTest.java @@ -7,7 +7,6 @@ import com.example.solidconnection.siteuser.domain.SiteUser; import com.example.solidconnection.siteuser.repository.SiteUserRepository; import com.example.solidconnection.support.integration.BaseIntegrationTest; -import com.example.solidconnection.type.Gender; import com.example.solidconnection.type.PreparationStatus; import com.example.solidconnection.type.Role; import com.example.solidconnection.university.dto.UniversityInfoForApplyPreviewResponse; @@ -144,10 +143,8 @@ private SiteUser createSiteUser() { "test@example.com", "nickname", "profileImageUrl", - "1999-01-01", PreparationStatus.CONSIDERING, - Role.MENTEE, - Gender.MALE + Role.MENTEE ); return siteUserRepository.save(siteUser); } diff --git a/src/test/java/com/example/solidconnection/util/PagingUtilsTest.java b/src/test/java/com/example/solidconnection/util/PagingUtilsTest.java deleted file mode 100644 index f8a10a473..000000000 --- a/src/test/java/com/example/solidconnection/util/PagingUtilsTest.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.example.solidconnection.util; - -import com.example.solidconnection.custom.exception.CustomException; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import static com.example.solidconnection.custom.exception.ErrorCode.INVALID_PAGE; -import static com.example.solidconnection.custom.exception.ErrorCode.INVALID_SIZE; -import static org.assertj.core.api.AssertionsForClassTypes.assertThatCode; - -@DisplayName("PagingUtils 테스트") -class PagingUtilsTest { - - private static final int VALID_PAGE = 1; - private static final int VALID_SIZE = 10; - - private static final int MIN_PAGE = 1; - private static final int MAX_PAGE = 50; - private static final int MIN_SIZE = 1; - private static final int MAX_SIZE = 50; - - @Test - @DisplayName("유효한 페이지 번호와 크기가 주어지면 예외가 발생하지 않는다") - void validateValidPageAndSize() { - // when & then - assertThatCode(() -> PagingUtils.validatePage(VALID_PAGE, VALID_SIZE)) - .doesNotThrowAnyException(); - } - - @Test - void 최소_페이지_번호보다_작으면_예외_응답을_반환한다() { - // when & then - assertThatCode(() -> PagingUtils.validatePage(MIN_PAGE - 1, VALID_SIZE)) - .isInstanceOf(CustomException.class) - .hasMessage(INVALID_PAGE.getMessage()); - } - - @Test - void 최대_페이지_번호보다_크면_예외_응답을_반환한다() { - // when & then - assertThatCode(() -> PagingUtils.validatePage(MAX_PAGE + 1, VALID_SIZE)) - .isInstanceOf(CustomException.class) - .hasMessage(INVALID_PAGE.getMessage()); - } - - @Test - void 최소_페이지_크기보다_작으면_예외_응답을_반환한다() { - // when & then - assertThatCode(() -> PagingUtils.validatePage(VALID_PAGE, MIN_SIZE - 1)) - .isInstanceOf(CustomException.class) - .hasMessage(INVALID_SIZE.getMessage()); - } - - @Test - void 최대_페이지_크기보다_크면_예외_응답을_반환한다() { - // when & then - assertThatCode(() -> PagingUtils.validatePage(VALID_PAGE, MAX_SIZE + 1)) - .isInstanceOf(CustomException.class) - .hasMessage(INVALID_SIZE.getMessage()); - } -}