feat: add Javadoc, add tests
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
parent
3705840989
commit
9889d25bf3
|
@ -3,6 +3,7 @@ package com.github.polpetta.mezzotre.orm.model;
|
|||
import com.github.polpetta.types.json.CallbackQueryMetadata;
|
||||
import io.ebean.annotation.DbJson;
|
||||
import io.ebean.annotation.Length;
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.Id;
|
||||
import javax.persistence.Table;
|
||||
|
@ -31,7 +32,10 @@ public class CallbackQueryContext extends Base {
|
|||
@Length(36)
|
||||
private final String entryGroup;
|
||||
|
||||
@DbJson @NotNull private final CallbackQueryMetadata fields;
|
||||
@DbJson
|
||||
@Column(columnDefinition = "json not null default '{}'::json")
|
||||
@NotNull
|
||||
private final CallbackQueryMetadata fields;
|
||||
|
||||
public CallbackQueryContext(String id, String entryGroup, CallbackQueryMetadata fields) {
|
||||
this.id = id;
|
||||
|
@ -50,4 +54,18 @@ public class CallbackQueryContext extends Base {
|
|||
public CallbackQueryMetadata getFields() {
|
||||
return fields;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "CallbackQueryContext{"
|
||||
+ "id='"
|
||||
+ id
|
||||
+ '\''
|
||||
+ ", entryGroup='"
|
||||
+ entryGroup
|
||||
+ '\''
|
||||
+ ", fields="
|
||||
+ fields
|
||||
+ '}';
|
||||
}
|
||||
}
|
||||
|
|
|
@ -23,6 +23,12 @@ import org.apache.velocity.tools.ToolManager;
|
|||
import org.apache.velocity.util.StringBuilderWriter;
|
||||
import org.slf4j.Logger;
|
||||
|
||||
/**
|
||||
* ChangeLanguage event is related to support locale change for a particular chat
|
||||
*
|
||||
* @author Davide Polonio
|
||||
* @since 1.0
|
||||
*/
|
||||
@Singleton
|
||||
public class ChangeLanguage implements Processor {
|
||||
|
||||
|
@ -31,6 +37,12 @@ public class ChangeLanguage implements Processor {
|
|||
private final LocalizedMessageFactory localizedMessageFactory;
|
||||
private final Logger log;
|
||||
|
||||
/**
|
||||
* Additional fields that are related to {@code changeLanguage} event
|
||||
*
|
||||
* @author Davide Polonio
|
||||
* @since 1.0
|
||||
*/
|
||||
public enum Field {
|
||||
NewLanguage("newLanguage");
|
||||
|
||||
|
@ -45,6 +57,12 @@ public class ChangeLanguage implements Processor {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Possible values for the additional {@link Field} of {@code changeLanguage} event
|
||||
*
|
||||
* @author Davide Polonio
|
||||
* @since 1.0
|
||||
*/
|
||||
public enum Language {
|
||||
English("en-US"),
|
||||
Italian("it-IT");
|
||||
|
|
|
@ -1,4 +1,13 @@
|
|||
-- apply changes
|
||||
create table callback_query_context (
|
||||
id varchar(36) not null,
|
||||
entry_group varchar(36) not null,
|
||||
fields json not null,
|
||||
entry_created timestamptz not null,
|
||||
entry_modified timestamptz not null,
|
||||
constraint pk_callback_query_context primary key (id)
|
||||
);
|
||||
|
||||
create table telegram_chat (
|
||||
id bigint generated by default as identity not null,
|
||||
chat_context jsonb not null default '{}'::jsonb not null,
|
||||
|
|
|
@ -0,0 +1,108 @@
|
|||
package com.github.polpetta.mezzotre.orm.model;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.github.polpetta.mezzotre.helper.Loader;
|
||||
import com.github.polpetta.mezzotre.helper.TestConfig;
|
||||
import com.github.polpetta.mezzotre.orm.model.query.QCallbackQueryContext;
|
||||
import com.github.polpetta.mezzotre.util.Clock;
|
||||
import com.github.polpetta.mezzotre.util.UUIDGenerator;
|
||||
import com.github.polpetta.types.json.CallbackQueryMetadata;
|
||||
import io.ebean.Database;
|
||||
import io.ebean.SqlRow;
|
||||
import java.sql.Timestamp;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Tag;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.testcontainers.containers.PostgreSQLContainer;
|
||||
import org.testcontainers.junit.jupiter.Container;
|
||||
import org.testcontainers.junit.jupiter.Testcontainers;
|
||||
|
||||
@Tag("slow")
|
||||
@Tag("database")
|
||||
@Testcontainers
|
||||
class CallbackQueryContextIntegrationTest {
|
||||
|
||||
private static ObjectMapper objectMapper;
|
||||
private static UUIDGenerator uuidGenerator;
|
||||
|
||||
@Container
|
||||
private final PostgreSQLContainer<?> postgresServer =
|
||||
new PostgreSQLContainer<>(TestConfig.POSTGRES_DOCKER_IMAGE);
|
||||
|
||||
private Database database;
|
||||
|
||||
@BeforeAll
|
||||
static void beforeAll() {
|
||||
objectMapper = new ObjectMapper();
|
||||
uuidGenerator = new UUIDGenerator();
|
||||
}
|
||||
|
||||
@BeforeEach
|
||||
void setUp() throws Exception {
|
||||
database =
|
||||
Loader.connectToDatabase(Loader.loadDefaultEbeanConfigWithPostgresSettings(postgresServer));
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldInsertEntryIntoDatabase() throws Exception {
|
||||
final String uuidContext = uuidGenerator.generateAsString();
|
||||
final String uuidGroup = uuidGenerator.generateAsString();
|
||||
final CallbackQueryMetadata callbackQueryMetadata =
|
||||
new CallbackQueryMetadata.CallbackQueryMetadataBuilder()
|
||||
.withEvent("eventExample")
|
||||
.withTelegramChatId(1234L)
|
||||
.withMessageId(4242L)
|
||||
.build();
|
||||
|
||||
final CallbackQueryContext callbackQueryContext =
|
||||
new CallbackQueryContext(uuidContext, uuidGroup, callbackQueryMetadata);
|
||||
callbackQueryContext.save();
|
||||
|
||||
final String query = "select * from callback_query_context where id = ?";
|
||||
final SqlRow savedCallbackQueryContext =
|
||||
database.sqlQuery(query).setParameter(uuidContext).findOne();
|
||||
|
||||
assertNotNull(savedCallbackQueryContext);
|
||||
assertEquals(uuidGroup, savedCallbackQueryContext.getString("entry_group"));
|
||||
assertEquals(uuidContext, savedCallbackQueryContext.getString("id"));
|
||||
assertEquals(
|
||||
objectMapper.writeValueAsString(callbackQueryMetadata),
|
||||
savedCallbackQueryContext.getString("fields"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldRetrieveEntryInDatabase() throws Exception {
|
||||
final Timestamp timestampFromUnixEpoch = Clock.getTimestampFromUnixEpoch(1L);
|
||||
final String uuidId = uuidGenerator.generateAsString();
|
||||
final String uuidEntryGroup = uuidGenerator.generateAsString();
|
||||
final CallbackQueryMetadata callbackQueryMetadata =
|
||||
new CallbackQueryMetadata.CallbackQueryMetadataBuilder()
|
||||
.withEvent("eventExample")
|
||||
.withTelegramChatId(12324L)
|
||||
.withMessageId(42342L)
|
||||
.build();
|
||||
final String insertQuery = "insert into callback_query_context values (?, ?, ?::json, ?, ?)";
|
||||
final int affectedRows =
|
||||
database
|
||||
.sqlUpdate(insertQuery)
|
||||
.setParameter(uuidId)
|
||||
.setParameter(uuidEntryGroup)
|
||||
.setParameter(objectMapper.writeValueAsString(callbackQueryMetadata))
|
||||
.setParameter(timestampFromUnixEpoch)
|
||||
.setParameter(timestampFromUnixEpoch)
|
||||
.execute();
|
||||
|
||||
assertEquals(1, affectedRows);
|
||||
|
||||
final CallbackQueryContext got = new QCallbackQueryContext().id.eq(uuidId).findOne();
|
||||
assertNotNull(got);
|
||||
final CallbackQueryMetadata gotFields = got.getFields();
|
||||
assertNotNull(gotFields);
|
||||
assertEquals("eventExample", gotFields.getEvent());
|
||||
assertEquals(12324L, Double.valueOf(gotFields.getTelegramChatId()).longValue());
|
||||
assertEquals(42342L, Double.valueOf(gotFields.getMessageId()).longValue());
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue