Skip to content

Commit

Permalink
(#25) Merge pull request #165 from iakunin/25
Browse files Browse the repository at this point in the history
#25 - StarsUp & ForksUp refactoring
#25 - ForksUp: added test-case with transaction rollback
  • Loading branch information
iakunin committed May 6, 2020
2 parents 8e6a749 + 6eb2c7b commit 717a95f
Show file tree
Hide file tree
Showing 6 changed files with 140 additions and 16 deletions.
17 changes: 5 additions & 12 deletions src/main/java/dev/iakunin/codexiabot/bot/Up.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,12 +29,12 @@ public Up(
GithubModule github,
ResultRepository repository,
Bot bot,
CodexiaModule codexiaModule
Submitter submitter
) {
this.github = github;
this.repository = repository;
this.bot = bot;
this.submitter = new Submitter(bot, repository, codexiaModule);
this.submitter = submitter;
}

public void run() {
Expand Down Expand Up @@ -71,28 +71,21 @@ private Long getLastProcessedStatId(GithubRepo repo) {
.orElse(0L);
}

@Slf4j
@AllArgsConstructor
private static class Submitter {
public static class Submitter {

private final dev.iakunin.codexiabot.bot.up.Bot bot;

private final ResultRepository repository;

private final CodexiaModule codexia;

// @todo #6 add test case with transaction rollback
@Transactional
public void submit(Deque<GithubRepoStat> deque) {
final CodexiaReview review = this.bot.review(deque.getFirst(), deque.getLast());

this.repository.save(
this.bot.result(deque.getLast())
);
this.repository.save(this.bot.result(deque.getLast()));
this.codexia.saveReview(review);
this.codexia.sendMeta(
this.bot.meta(review)
);
this.codexia.sendMeta(this.bot.meta(review));
}
}
}
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
package dev.iakunin.codexiabot.bot.config;

import dev.iakunin.codexiabot.bot.Up;
import dev.iakunin.codexiabot.bot.Up.Submitter;
import dev.iakunin.codexiabot.bot.repository.ForksUpResultRepository;
import dev.iakunin.codexiabot.bot.up.Forks;
import dev.iakunin.codexiabot.codexia.CodexiaModule;
import dev.iakunin.codexiabot.common.runnable.Logging;
import dev.iakunin.codexiabot.github.GithubModule;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
Expand Down Expand Up @@ -55,13 +57,21 @@ public static class ForksUpConfig {
private final Forks bot;

@Bean
public Up forksUp() {
@Autowired
public Up forksUp(
@Qualifier("forksUpSubmitter") Submitter submitter
) {
return new Up(
this.github,
this.repository,
this.bot,
this.codexia
submitter
);
}

@Bean
public Submitter forksUpSubmitter() {
return new Submitter(this.bot, this.repository, this.codexia);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import dev.iakunin.codexiabot.common.runnable.Logging;
import dev.iakunin.codexiabot.github.GithubModule;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
Expand Down Expand Up @@ -55,13 +56,21 @@ public static class StarsUpConfig {
private final Stars bot;

@Bean
public Up starsUp() {
@Autowired
public Up starsUp(
@Qualifier("starsUpSubmitter") Up.Submitter submitter
) {
return new Up(
this.github,
this.repository,
this.bot,
this.codexia
submitter
);
}

@Bean
public Up.Submitter starsUpSubmitter() {
return new Up.Submitter(this.bot, this.repository, this.codexia);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
package dev.iakunin.codexiabot.bot;

import com.github.database.rider.core.api.dataset.DataSet;
import com.github.database.rider.core.api.dataset.ExpectedDataSet;
import dev.iakunin.codexiabot.AbstractIntegrationTest;
import dev.iakunin.codexiabot.CodexiaBotApplication;
import dev.iakunin.codexiabot.codexia.CodexiaModule;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.Primary;

@SpringBootTest(classes = {
AbstractIntegrationTest.TestConfig.class,
ForksUpTransactionIntegrationTest.TestConfig.class,
})
public class ForksUpTransactionIntegrationTest extends AbstractIntegrationTest {

private static final String EXCEPTION_MESSAGE = "Some error";

@Qualifier("forksUp")
@Autowired
private Up forksUp;

@Test
@DataSet(
value = "db-rider/bot/forks-up-transaction/initial/transactionRollback.yml",
cleanBefore = true, cleanAfter = true
)
@ExpectedDataSet("db-rider/bot/forks-up-transaction/expected/transactionRollback.yml")
public void transactionRollback() {
final RuntimeException exception = assertThrows(RuntimeException.class, this.forksUp::run);

assertEquals(
ForksUpTransactionIntegrationTest.EXCEPTION_MESSAGE,
exception.getMessage()
);
}

@Configuration
@Import(CodexiaBotApplication.class)
static class TestConfig {
@Bean
@Primary
public CodexiaModule codexiaModule() {
final CodexiaModule mock = Mockito.mock(CodexiaModule.class);
Mockito.doThrow(
new RuntimeException(
ForksUpTransactionIntegrationTest.EXCEPTION_MESSAGE
)
)
.when(mock)
.sendMeta(Mockito.any());

return mock;
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
forks_up_result: []

codexia_review: []
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
github_repo:
-
id: 1
uuid: "groovy: UUID.randomUUID().toString()"
external_id: "150713223"
full_name: "test-project1/test-repo1"

codexia_project:
-
id: 5
uuid: "groovy: UUID.randomUUID().toString()"
external_id: 12
coordinates: "test-project1/test-repo1"
author: "some-first-author"
deleted: null
project_created_at: "2019-12-20 12:01:02"

github_repo_source:
-
id: 1
uuid: "groovy: UUID.randomUUID().toString()"
github_repo_id: 1
source: "CODEXIA"
external_id: "12"

github_repo_stat:
-
id: 1
uuid: "groovy: UUID.randomUUID().toString()"
github_repo_id: 1
type: "GITHUB_API"
stat: '{"type": "GITHUB_API", "forks": 402}'
created_at: "2020-02-11 10:06:16.123456"
-
id: 3
uuid: "groovy: UUID.randomUUID().toString()"
github_repo_id: 1
type: "GITHUB_API"
stat: '{"type": "GITHUB_API", "forks": 459}'
created_at: "2020-02-16 18:46:09.652645"

forks_up_result: []

codexia_review: []

1 comment on commit 717a95f

@0pdd
Copy link

@0pdd 0pdd commented on 717a95f May 6, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Puzzle 6-4d9a1ad5 disappeared from src/main/java/dev/iakunin/codexiabot/bot/StarsUp.java, that's why I closed #25. Please, remember that the puzzle was not necessarily removed in this particular commit. Maybe it happened earlier, but we discovered this fact only now.

Please sign in to comment.