Skip to content

Commit 676ad28

Browse files
committed
Import series: connect import request with created series.
Fix #700
1 parent 6f6b733 commit 676ad28

File tree

8 files changed

+52
-7
lines changed

8 files changed

+52
-7
lines changed

src/main/java/ru/mystamps/web/controller/SeriesImportController.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ public String processImportSeriesForm(
182182
return "series/import/info";
183183
}
184184

185-
Integer seriesId = seriesImportService.addSeries(form, currentUserId);
185+
Integer seriesId = seriesImportService.addSeries(form, requestId, currentUserId);
186186

187187
return redirectTo(Url.INFO_SERIES_PAGE, seriesId);
188188
}

src/main/java/ru/mystamps/web/dao/SeriesImportDao.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626

2727
public interface SeriesImportDao {
2828
Integer add(ImportSeriesDbDto importRequest);
29+
void setSeriesIdOnRequest(Integer requestId, Integer seriesId, Date updatedAt);
2930
void changeStatus(Integer requestId, Date date, String oldStatus, String newStatus);
3031
ImportRequestDto findById(Integer id);
3132
void addRawContent(Integer requestId, Date createdAt, Date updatedAt, String content);

src/main/java/ru/mystamps/web/dao/impl/JdbcSeriesImportDao.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,9 @@ public class JdbcSeriesImportDao implements SeriesImportDao {
4949
@Value("${series_import_requests.create}")
5050
private String createSeriesImportRequestSql;
5151

52+
@Value("${series_import_requests.set_series_id}")
53+
private String setSeriesIdSql;
54+
5255
@Value("${series_import_requests.change_status}")
5356
private String changeStatusSql;
5457

@@ -93,6 +96,23 @@ public Integer add(ImportSeriesDbDto importRequest) {
9396
return Integer.valueOf(holder.getKey().intValue());
9497
}
9598

99+
@Override
100+
public void setSeriesIdOnRequest(Integer requestId, Integer seriesId, Date updatedAt) {
101+
Map<String, Object> params = new HashMap<>();
102+
params.put("id", requestId);
103+
params.put("series_id", seriesId);
104+
params.put("date", updatedAt);
105+
106+
int affected = jdbcTemplate.update(setSeriesIdSql, params);
107+
108+
Validate.validState(
109+
affected == 1,
110+
"Unexpected number of affected rows after setting series id on request #%d: %d",
111+
requestId,
112+
affected
113+
);
114+
}
115+
96116
// TODO: introduce dao
97117
@Override
98118
public void changeStatus(Integer requestId, Date date, String oldStatus, String newStatus) {

src/main/java/ru/mystamps/web/service/SeriesImportService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525

2626
public interface SeriesImportService {
2727
Integer addRequest(RequestImportDto dto, Integer userId);
28-
Integer addSeries(AddSeriesDto dto, Integer userId);
28+
Integer addSeries(AddSeriesDto dto, Integer requestId, Integer userId);
2929
void changeStatus(Integer requestId, String oldStatus, String newStatus);
3030
ImportRequestDto findById(Integer requestId);
3131
void saveDownloadedContent(Integer requestId, String content);

src/main/java/ru/mystamps/web/service/SeriesImportServiceImpl.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ public class SeriesImportServiceImpl implements SeriesImportService {
5151
private static final String UNPROCESSED = "Unprocessed";
5252
private static final String DOWNLOADING_SUCCEEDED = "DownloadingSucceeded";
5353
private static final String PARSING_SUCCEEDED = "ParsingSucceeded";
54+
private static final String IMPORT_SUCCEEDED = "ImportSucceeded";
5455

5556
private final Logger log;
5657
private final SeriesImportDao seriesImportDao;
@@ -85,8 +86,17 @@ public Integer addRequest(RequestImportDto dto, Integer userId) {
8586
@Override
8687
@Transactional
8788
@PreAuthorize(HasAuthority.IMPORT_SERIES)
88-
public Integer addSeries(AddSeriesDto dto, Integer userId) {
89+
public Integer addSeries(AddSeriesDto dto, Integer requestId, Integer userId) {
8990
Integer seriesId = seriesService.add(dto, userId, false);
91+
92+
Date now = new Date();
93+
94+
// @todo #700 Reduce number of SQL queries by one.
95+
// Here we're updating series_import_requests twice: when we set series_id field
96+
// and later when we change status_id. It's possible to do this in one-shot
97+
seriesImportDao.setSeriesIdOnRequest(requestId, seriesId, now);
98+
changeStatus(requestId, PARSING_SUCCEEDED, IMPORT_SUCCEEDED);
99+
90100
return seriesId;
91101
}
92102

src/main/resources/sql/series_import_request_dao_queries.properties

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,12 @@ SELECT :url \
1515
FROM series_import_request_statuses st \
1616
WHERE st.name = :status
1717

18+
series_import_requests.set_series_id = \
19+
UPDATE series_import_requests \
20+
SET series_id = :series_id \
21+
, updated_at = :date \
22+
WHERE id = :id
23+
1824
series_import_requests.change_status = \
1925
UPDATE series_import_requests r \
2026
SET status_id = \

src/main/webapp/WEB-INF/views/series/import/info.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -297,6 +297,7 @@ <h3 th:text="#{t_gathered_data}">
297297
<td></td>
298298
<td>
299299
<input
300+
id="create-series-btn"
300301
type="submit"
301302
class="btn btn-primary"
302303
value="Import"

src/test/robotframework/series/import/request-logic.robot

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
*** Settings ***
22
Documentation Verify scenarios of importing a series from an external site
33
Library Selenium2Library
4+
Library String
45
Resource ../../auth.steps.robot
56
Suite Setup Before Test Suite
67
Suite Teardown After Test Suite
@@ -12,8 +13,8 @@ Import series from an external site (in English, use category, country and date
1213
[Documentation] Verify import from a page in English and with different locators
1314
Input Text id=url http://127.0.0.1:8080/series/2?lang=en
1415
Submit Form id=import-series-form
15-
${location}= Get Location
16-
Should Match Regexp ${location} /series/import/request/\\d+
16+
${requestLocation}= Get Location
17+
Should Match Regexp ${requestLocation} /series/import/request/\\d+
1718
${category}= Get Selected List Label id=category
1819
${country}= Get Selected List Label id=country
1920
# We can't use "Textfield Value Should Be" because it causes NPE on inputs of type url/number:
@@ -31,14 +32,20 @@ Import series from an external site (in English, use category, country and date
3132
Should Be Equal ${year} 2000
3233
Input Text id=quantity 1
3334
Submit Form id=create-series-form
34-
${location}= Get Location
35-
Should Match Regexp ${location} /series/\\d+
35+
${seriesLocation}= Get Location
36+
Should Match Regexp ${seriesLocation} /series/\\d+
3637
Element Text Should Be id=category_name Prehistoric animals
3738
Element Text Should Be id=country_name Italy
3839
Element Text Should Be id=issue_date 2000
3940
Element Text Should Be id=quantity 1
4041
Element Text Should Be id=perforated Yes
4142
Page Should Contain Image id=series-image-1
43+
Go To ${requestLocation}
44+
Element Text Should Be id=request-status ImportSucceeded
45+
Element Should Be Disabled id=create-series-btn
46+
# @todo #700 /series/import/request/{id}: link to imported series should not use fixed domain
47+
${expectedSeriesLink}= Replace String ${seriesLocation} ${SITE_URL} https://my-stamps.ru
48+
Page Should Contain Link link=${expectedSeriesLink}
4249

4350
Import series from an external site (in Russian, use description locator)
4451
[Documentation] Verify import from a page in Russian and shared locator

0 commit comments

Comments
 (0)