Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
라이앤캐처스 크루공간
허창호
연습용
Commits
969fb9e8
Commit
969fb9e8
authored
Feb 06, 2022
by
madvirus
Browse files
Initial Commit
parents
Changes
187
Hide whitespace changes
Inline
Side-by-side
src/test/java/com/myshop/member/command/domain/MemberRepositoryIT.java
0 → 100644
View file @
969fb9e8
package
com.myshop.member.command.domain
;
import
com.myshop.common.model.Email
;
import
com.myshop.helper.DbHelper
;
import
org.junit.jupiter.api.BeforeEach
;
import
org.junit.jupiter.api.Test
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.test.context.SpringBootTest
;
import
org.springframework.jdbc.core.JdbcTemplate
;
import
org.springframework.jdbc.support.rowset.SqlRowSet
;
import
org.springframework.transaction.annotation.Transactional
;
import
javax.persistence.LockModeType
;
import
java.util.Optional
;
import
java.util.Set
;
import
static
org
.
assertj
.
core
.
api
.
Assertions
.
assertThat
;
@SpringBootTest
class
MemberRepositoryIT
{
@Autowired
private
MemberRepository
memberRepository
;
@Autowired
private
DbHelper
dbHelper
;
@Autowired
private
JdbcTemplate
jdbcTemplate
;
@BeforeEach
void
setUp
()
{
dbHelper
.
clear
();
}
@Test
void
findById
()
{
jdbcTemplate
.
update
(
"""
insert into member values (?, ?, ?, ?, ?)
"""
,
"member1"
,
"이름"
,
"p1"
,
false
,
"email1@email.com,email2@email.com"
);
Optional
<
Member
>
memOpt
=
memberRepository
.
findById
(
MemberId
.
of
(
"member1"
));
assertThat
(
memOpt
).
isPresent
();
Member
member
=
memOpt
.
get
();
assertThat
(
member
.
getEmails
().
getEmails
()).
contains
(
Email
.
of
(
"email1@email.com"
),
Email
.
of
(
"email2@email.com"
)
);
}
@Test
void
save
()
{
Member
member
=
new
Member
(
MemberId
.
of
(
"id1"
),
"이름2"
);
member
.
changeEmails
(
Set
.
of
(
Email
.
of
(
"mail1@mail.com"
),
Email
.
of
(
"mail2@mail.com"
)));
memberRepository
.
save
(
member
);
SqlRowSet
rs
=
jdbcTemplate
.
queryForRowSet
(
"select * from member where member_id = ?"
,
"id1"
);
assertThat
(
rs
.
next
()).
isTrue
();
assertThat
(
rs
.
getString
(
"emails"
)).
contains
(
"mail1@mail.com"
,
"mail2@mail.com"
);
}
@Transactional
@Test
void
findByIdForUpdate
()
{
jdbcTemplate
.
update
(
"""
insert into member values (?, ?, ?, ?, ?)
"""
,
"member1"
,
"이름"
,
"p1"
,
false
,
"email1@email.com,email2@email.com"
);
Optional
<
Member
>
member1
=
memberRepository
.
findByIdForUpdate
(
MemberId
.
of
(
"member1"
));
}
}
\ No newline at end of file
src/test/java/com/myshop/member/query/MemberDataDaoIT.java
0 → 100644
View file @
969fb9e8
package
com.myshop.member.query
;
import
com.myshop.common.jpa.Rangeable
;
import
com.myshop.common.jpa.SpecBuilder
;
import
org.junit.jupiter.api.Test
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.test.context.SpringBootTest
;
import
org.springframework.data.domain.Page
;
import
org.springframework.data.domain.PageRequest
;
import
org.springframework.data.domain.Sort
;
import
org.springframework.data.jpa.domain.Specification
;
import
org.springframework.test.context.jdbc.Sql
;
import
org.springframework.util.StringUtils
;
import
java.util.List
;
import
java.util.Optional
;
@SpringBootTest
@Sql
(
"classpath:shop-init-test.sql"
)
class
MemberDataDaoIT
{
private
Logger
logger
=
LoggerFactory
.
getLogger
(
getClass
());
@Autowired
private
MemberDataDao
memberDataDao
;
@Test
void
findByBlocked
()
{
Page
<
MemberData
>
page
=
memberDataDao
.
findByBlocked
(
false
,
PageRequest
.
of
(
2
,
3
));
logger
.
info
(
"blocked result: {}"
,
page
.
getContent
().
size
());
List
<
MemberData
>
content
=
page
.
getContent
();
long
totalElements
=
page
.
getTotalElements
();
int
totalPages
=
page
.
getTotalPages
();
int
number
=
page
.
getNumber
();
int
numberOfElements
=
page
.
getNumberOfElements
();
int
size
=
page
.
getSize
();
logger
.
info
(
"content.size()={}, totalElements={}, totalPages={}, number={}, numberOfElements={}"
,
content
.
size
(),
totalElements
,
totalPages
,
number
,
numberOfElements
);
}
@Test
void
findByNameLike
()
{
Sort
sort
=
Sort
.
by
(
"name"
).
descending
();
PageRequest
pageReq
=
PageRequest
.
of
(
1
,
2
,
sort
);
List
<
MemberData
>
user
=
memberDataDao
.
findByNameLike
(
"사용자%"
,
pageReq
);
logger
.
info
(
"name llike result: {}"
,
user
.
size
());
}
@Test
void
findAll
()
{
Specification
<
MemberData
>
spec
=
MemberDataSpecs
.
nonBlocked
();
List
<
MemberData
>
result
=
memberDataDao
.
findAll
(
spec
,
PageRequest
.
of
(
1
,
2
));
logger
.
info
(
"spec result: {}"
,
result
.
size
());
}
@Test
void
getRange
()
{
Specification
<
MemberData
>
spec
=
MemberDataSpecs
.
nonBlocked
();
List
<
MemberData
>
result
=
memberDataDao
.
getRange
(
spec
,
Rangeable
.
of
(
2
,
4
));
logger
.
info
(
"spec result: {}"
,
result
.
size
());
}
@Test
void
findFirst
()
{
List
<
MemberData
>
result
=
memberDataDao
.
findFirst3ByNameLikeOrderByName
(
"사용자%"
);
logger
.
info
(
"result: {}"
,
result
.
size
());
Optional
<
MemberData
>
member
=
memberDataDao
.
findFirstByNameLikeOrderByName
(
"없음"
);
logger
.
info
(
"result: {}"
,
member
);
MemberData
data
=
memberDataDao
.
findFirstByBlockedOrderById
(
false
);
logger
.
info
(
"result: {}"
,
data
);
}
@Test
void
compositeSpec
()
{
SearchRequest
searchRequest
=
new
SearchRequest
();
Specification
<
MemberData
>
spec
=
Specification
.
where
(
null
);
if
(
searchRequest
.
isOnlyNotBlocked
())
{
spec
=
spec
.
and
(
MemberDataSpecs
.
nonBlocked
());
}
if
(
StringUtils
.
hasText
(
searchRequest
.
getName
()))
{
spec
=
spec
.
and
(
MemberDataSpecs
.
nameLike
(
searchRequest
.
getName
()));
}
List
<
MemberData
>
result
=
memberDataDao
.
findAll
(
spec
,
PageRequest
.
of
(
0
,
5
));
logger
.
info
(
"result: {}"
,
result
.
size
());
}
@Test
void
specBuilder
()
{
SearchRequest
searchRequest
=
new
SearchRequest
();
searchRequest
.
setOnlyNotBlocked
(
true
);
Specification
<
MemberData
>
spec
=
SpecBuilder
.
builder
(
MemberData
.
class
)
.
ifTrue
(
searchRequest
.
isOnlyNotBlocked
(),
()
->
MemberDataSpecs
.
nonBlocked
())
.
ifHasText
(
searchRequest
.
getName
(),
name
->
MemberDataSpecs
.
nameLike
(
searchRequest
.
getName
()))
.
toSpec
();
List
<
MemberData
>
result
=
memberDataDao
.
findAll
(
spec
,
PageRequest
.
of
(
0
,
5
));
logger
.
info
(
"result: {}"
,
result
.
size
());
}
}
\ No newline at end of file
src/test/java/com/myshop/member/query/SearchRequest.java
0 → 100644
View file @
969fb9e8
package
com.myshop.member.query
;
public
class
SearchRequest
{
private
boolean
onlyNotBlocked
;
private
String
name
;
public
boolean
isOnlyNotBlocked
()
{
return
onlyNotBlocked
;
}
public
void
setOnlyNotBlocked
(
boolean
onlyNotBlocked
)
{
this
.
onlyNotBlocked
=
onlyNotBlocked
;
}
public
String
getName
()
{
return
name
;
}
public
void
setName
(
String
name
)
{
this
.
name
=
name
;
}
}
src/test/java/com/myshop/order/command/application/CancelOrderServiceIT.java
0 → 100644
View file @
969fb9e8
package
com.myshop.order.command.application
;
import
com.myshop.order.command.domain.Canceller
;
import
com.myshop.order.command.domain.OrderNo
;
import
org.junit.jupiter.api.Test
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.test.context.SpringBootTest
;
import
org.springframework.test.context.jdbc.Sql
;
@SpringBootTest
@Sql
(
"classpath:shop-init-test.sql"
)
class
CancelOrderServiceIT
{
@Autowired
private
CancelOrderService
cancelOrderService
;
@Test
void
cancel
()
{
cancelOrderService
.
cancel
(
OrderNo
.
of
(
"ORDER-001"
),
Canceller
.
of
(
"user1"
));
}
}
\ No newline at end of file
src/test/java/com/myshop/order/command/domain/OrderRepositoryIT.java
0 → 100644
View file @
969fb9e8
package
com.myshop.order.command.domain
;
import
com.myshop.catalog.command.domain.product.ProductId
;
import
com.myshop.common.model.Address
;
import
com.myshop.common.model.Money
;
import
com.myshop.helper.DbHelper
;
import
com.myshop.member.command.domain.MemberId
;
import
org.junit.jupiter.api.BeforeEach
;
import
org.junit.jupiter.api.Test
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.test.context.SpringBootTest
;
import
org.springframework.jdbc.core.JdbcTemplate
;
import
java.time.LocalDateTime
;
import
java.util.List
;
import
java.util.Optional
;
import
static
org
.
assertj
.
core
.
api
.
Assertions
.
assertThat
;
@SpringBootTest
class
OrderRepositoryIT
{
private
Logger
logger
=
LoggerFactory
.
getLogger
(
getClass
());
@Autowired
private
OrderRepository
orderRepository
;
@Autowired
private
JdbcTemplate
jdbcTemplate
;
@Autowired
private
DbHelper
dbHelper
;
@BeforeEach
void
setUp
()
{
dbHelper
.
clear
();
}
@Test
void
save
()
{
orderRepository
.
save
(
new
Order
(
OrderNo
.
of
(
"ORD1234"
),
new
Orderer
(
MemberId
.
of
(
"member"
),
"name"
),
List
.
of
(
new
OrderLine
(
ProductId
.
of
(
"PRDID"
),
new
Money
(
1000
),
2
)),
new
ShippingInfo
(
new
Address
(
"12345"
,
"addr1"
,
"addr2"
),
"집앞"
,
new
Receiver
(
"아무개"
,
"010-0000-0000"
)),
OrderState
.
PAYMENT_WAITING
));
}
@Test
void
findById
()
{
jdbcTemplate
.
update
(
"""
insert into purchase_order
values (?,?,?,?,?,?,?,?,?,?,?,?,?)
"""
,
"ORD1234"
,
1
,
"user1"
,
"사용자1"
,
5000
,
"11122"
,
"주소1"
,
"주소2"
,
"1층"
,
"받는사람"
,
"010-1234-5689"
,
OrderState
.
PAYMENT_WAITING
.
name
(),
LocalDateTime
.
now
()
);
jdbcTemplate
.
update
(
"""
insert into order_line
values (?,?,?,?,?,?)
"""
,
"ORD1234"
,
0
,
"PROD1"
,
1000
,
5
,
5000
);
Optional
<
Order
>
ordOpt
=
orderRepository
.
findById
(
OrderNo
.
of
(
"ORD1234"
));
assertThat
(
ordOpt
).
isPresent
();
Order
order
=
ordOpt
.
get
();
assertThat
(
order
.
getOrderLines
()).
hasSize
(
1
);
}
@Test
void
nextOrderNo
()
{
OrderNo
orderNo
=
orderRepository
.
nextOrderNo
();
logger
.
info
(
"nextOrderNo: {}"
,
orderNo
.
getNumber
());
}
}
\ No newline at end of file
src/test/java/com/myshop/order/query/dao/OrderSummaryDaoIT.java
0 → 100644
View file @
969fb9e8
package
com.myshop.order.query.dao
;
import
com.myshop.order.query.dto.OrderSummary
;
import
com.myshop.order.query.dto.OrderView
;
import
org.junit.jupiter.api.Test
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.test.context.SpringBootTest
;
import
org.springframework.data.domain.PageRequest
;
import
org.springframework.data.domain.Pageable
;
import
org.springframework.data.domain.Sort
;
import
org.springframework.data.jpa.domain.Specification
;
import
org.springframework.test.context.jdbc.Sql
;
import
java.time.LocalDateTime
;
import
java.util.List
;
import
static
org
.
assertj
.
core
.
api
.
Assertions
.
assertThat
;
@SpringBootTest
@Sql
(
"classpath:shop-init-test.sql"
)
class
OrderSummaryDaoIT
{
@Autowired
private
OrderSummaryDao
orderSummaryDao
;
@Test
void
findAllSpec
()
{
LocalDateTime
from
=
LocalDateTime
.
of
(
2022
,
1
,
1
,
0
,
0
,
0
);
LocalDateTime
to
=
LocalDateTime
.
of
(
2022
,
1
,
2
,
0
,
0
,
0
);
Specification
<
OrderSummary
>
spec
=
OrderSummarySpecs
.
ordererId
(
"user1"
)
.
and
(
OrderSummarySpecs
.
orderDateBetween
(
from
,
to
));
List
<
OrderSummary
>
results
=
orderSummaryDao
.
findAll
(
spec
);
assertThat
(
results
).
hasSize
(
1
);
}
@Test
void
findAllSpecSort
()
{
LocalDateTime
from
=
LocalDateTime
.
of
(
2022
,
1
,
1
,
0
,
0
,
0
);
LocalDateTime
to
=
LocalDateTime
.
of
(
2022
,
1
,
2
,
0
,
0
,
0
);
Specification
<
OrderSummary
>
spec
=
OrderSummarySpecs
.
ordererId
(
"user1"
)
.
and
(
OrderSummarySpecs
.
orderDateBetween
(
from
,
to
));
Sort
sort
=
Sort
.
by
(
"number"
).
ascending
().
and
(
Sort
.
by
(
"orderDate"
).
descending
());
List
<
OrderSummary
>
results
=
orderSummaryDao
.
findAll
(
spec
,
sort
);
assertThat
(
results
).
hasSize
(
1
);
}
@Test
void
findAllSpecPageable
()
{
LocalDateTime
from
=
LocalDateTime
.
of
(
2022
,
1
,
1
,
0
,
0
,
0
);
LocalDateTime
to
=
LocalDateTime
.
of
(
2023
,
1
,
2
,
0
,
0
,
0
);
Specification
<
OrderSummary
>
spec
=
OrderSummarySpecs
.
orderDateBetween
(
from
,
to
);
Pageable
pageable
=
PageRequest
.
of
(
1
,
1
);
List
<
OrderSummary
>
results
=
orderSummaryDao
.
findAll
(
spec
,
pageable
);
assertThat
(
results
).
hasSize
(
2
);
}
@Test
void
findByOrdererIdOrderByNumberDesc
()
{
List
<
OrderSummary
>
results
=
orderSummaryDao
.
findByOrdererIdOrderByNumberDesc
(
"user1"
);
assertThat
(
results
.
get
(
0
).
getNumber
()).
isEqualTo
(
"ORDER-002"
);
assertThat
(
results
.
get
(
1
).
getNumber
()).
isEqualTo
(
"ORDER-001"
);
}
@Test
void
findByOrdererIdSort
()
{
Sort
sort
=
Sort
.
by
(
"number"
).
ascending
();
List
<
OrderSummary
>
results
=
orderSummaryDao
.
findByOrdererId
(
"user1"
,
sort
);
assertThat
(
results
.
get
(
0
).
getNumber
()).
isEqualTo
(
"ORDER-001"
);
assertThat
(
results
.
get
(
1
).
getNumber
()).
isEqualTo
(
"ORDER-002"
);
}
@Test
void
findByOrdererIdPageable
()
{
Pageable
pageable
=
PageRequest
.
of
(
1
,
1
);
List
<
OrderSummary
>
results
=
orderSummaryDao
.
findByOrdererId
(
"user1"
,
pageable
);
assertThat
(
results
.
get
(
0
).
getNumber
()).
isEqualTo
(
"ORDER-001"
);
assertThat
(
results
.
get
(
1
).
getNumber
()).
isEqualTo
(
"ORDER-002"
);
}
@Test
void
findOrderView
()
{
List
<
OrderView
>
result
=
orderSummaryDao
.
findOrderView
(
"user1"
);
}
}
\ No newline at end of file
src/test/resources/shop-init-test.sql
0 → 100644
View file @
969fb9e8
truncate
table
purchase_order
;
truncate
table
order_line
;
truncate
table
category
;
truncate
table
product_category
;
truncate
table
product
;
truncate
table
image
;
truncate
table
member
;
truncate
table
member_authorities
;
truncate
table
article
;
truncate
table
article_content
;
truncate
table
evententry
;
insert
into
member
(
member_id
,
name
,
password
,
blocked
)
values
(
'user1'
,
'사용자1'
,
'1234'
,
false
);
insert
into
member
(
member_id
,
name
,
password
,
blocked
)
values
(
'user2'
,
'사용자2'
,
'5678'
,
false
);
insert
into
member
(
member_id
,
name
,
password
,
blocked
)
values
(
'user3'
,
'사용자3'
,
'5678'
,
true
);
insert
into
member
(
member_id
,
name
,
password
,
blocked
)
values
(
'user4'
,
'사용자4'
,
'5678'
,
true
);
insert
into
member
(
member_id
,
name
,
password
,
blocked
)
values
(
'user5'
,
'사용자5'
,
'5678'
,
false
);
insert
into
member
(
member_id
,
name
,
password
,
blocked
)
values
(
'user6'
,
'사용자6'
,
'5678'
,
false
);
insert
into
member
(
member_id
,
name
,
password
,
blocked
)
values
(
'user7'
,
'사용자7'
,
'5678'
,
false
);
insert
into
member
(
member_id
,
name
,
password
,
blocked
)
values
(
'user8'
,
'사용자8'
,
'5678'
,
false
);
insert
into
member
(
member_id
,
name
,
password
,
blocked
)
values
(
'admin'
,
'운영자'
,
'admin1234'
,
false
);
insert
into
member_authorities
values
(
'user1'
,
'ROLE_USER'
);
insert
into
member_authorities
values
(
'user2'
,
'ROLE_USER'
);
insert
into
member_authorities
values
(
'admin'
,
'ROLE_ADMIN'
);
insert
into
category
values
(
1001
,
'전자제품'
);
insert
into
category
values
(
2001
,
'필기구'
);
insert
into
product
values
(
'prod-001'
,
'라즈베리파이3 모델B'
,
56000
,
'모델B'
);
insert
into
image
(
product_id
,
list_idx
,
image_type
,
image_path
,
upload_time
)
values
(
'prod-001'
,
0
,
'II'
,
'rpi3.jpg'
,
now
());
insert
into
image
(
product_id
,
list_idx
,
image_type
,
image_path
,
upload_time
)
values
(
'prod-001'
,
1
,
'EI'
,
'http://external/image/path'
,
now
());
insert
into
product_category
values
(
'prod-001'
,
1001
);
insert
into
product
values
(
'prod-002'
,
'어프로치 휴대용 화이트보드 세트'
,
11920
,
'화이트보드'
);
insert
into
image
(
product_id
,
list_idx
,
image_type
,
image_path
,
upload_time
)
values
(
'prod-002'
,
0
,
'II'
,
'wbp.png'
,
now
());
insert
into
product_category
values
(
'prod-002'
,
2001
);
insert
into
product
values
(
'prod-003'
,
'볼펜 겸용 터치펜'
,
9000
,
'볼펜과 터치펜을 하나로!'
);
insert
into
image
(
product_id
,
list_idx
,
image_type
,
image_path
,
upload_time
)
values
(
'prod-003'
,
0
,
'II'
,
'pen.jpg'
,
now
());
insert
into
image
(
product_id
,
list_idx
,
image_type
,
image_path
,
upload_time
)
values
(
'prod-003'
,
1
,
'II'
,
'pen2.jpg'
,
now
());
insert
into
product_category
values
(
'prod-003'
,
1001
);
insert
into
product_category
values
(
'prod-003'
,
2001
);
insert
into
purchase_order
values
(
'ORDER-001'
,
1
,
'user1'
,
'사용자1'
,
4000
,
'123456'
,
'서울시'
,
'관악구'
,
'메시지'
,
'사용자1'
,
'010-1234-5678'
,
'PREPARING'
,
'2022-01-01 15:30:00'
);
insert
into
order_line
values
(
'ORDER-001'
,
0
,
'prod-001'
,
1000
,
2
,
2000
);
insert
into
order_line
values
(
'ORDER-001'
,
1
,
'prod-002'
,
2000
,
1
,
2000
);
insert
into
purchase_order
values
(
'ORDER-002'
,
2
,
'user1'
,
'사용자1'
,
5000
,
'123456'
,
'서울시'
,
'관악구'
,
'메시지'
,
'사용자1'
,
'010-1234-5678'
,
'PREPARING'
,
'2022-01-02 09:18:21'
);
insert
into
order_line
values
(
'ORDER-002'
,
0
,
'prod-001'
,
1000
,
5
,
5000
);
insert
into
purchase_order
values
(
'ORDER-003'
,
3
,
'user2'
,
'사용자2'
,
5000
,
'123456'
,
'서울시'
,
'관악구'
,
'메시지'
,
'사용자1'
,
'010-1234-5678'
,
'SHIPPED'
,
'2016-01-03 09:00:00'
);
insert
into
order_line
values
(
'ORDER-003'
,
0
,
'prod-001'
,
1000
,
5
,
5000
);
insert
into
article
(
title
)
values
(
'제목'
);
insert
into
article_content
values
(
1
,
'content'
,
'type'
);
insert
into
evententry
(
type
,
content_type
,
payload
,
timestamp
)
values
(
'com.myshop.eventstore.infra.SampleEvent'
,
'application/json'
,
'{"name": "name1", "value": 11}'
,
now
());
insert
into
evententry
(
type
,
content_type
,
payload
,
timestamp
)
values
(
'com.myshop.eventstore.infra.SampleEvent'
,
'application/json'
,
'{"name": "name2", "value": 12}'
,
now
());
insert
into
evententry
(
type
,
content_type
,
payload
,
timestamp
)
values
(
'com.myshop.eventstore.infra.SampleEvent'
,
'application/json'
,
'{"name": "name3", "value": 13}'
,
now
());
insert
into
evententry
(
type
,
content_type
,
payload
,
timestamp
)
values
(
'com.myshop.eventstore.infra.SampleEvent'
,
'application/json'
,
'{"name": "name4", "value": 14}'
,
now
());
Prev
1
…
6
7
8
9
10
Next
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment