From 031831b59984919195dd624c107f912401eaa567 Mon Sep 17 00:00:00 2001 From: Otavio Santana Date: Fri, 28 Mar 2025 07:51:56 +0000 Subject: [PATCH 1/6] test: generate scenario to tet couchdb Signed-off-by: Otavio Santana --- .../DefaultCouchDBDocumentManagerTest.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/jnosql-couchdb/src/test/java/org/eclipse/jnosql/databases/couchdb/communication/DefaultCouchDBDocumentManagerTest.java b/jnosql-couchdb/src/test/java/org/eclipse/jnosql/databases/couchdb/communication/DefaultCouchDBDocumentManagerTest.java index 0dabe1aec..ec2822126 100644 --- a/jnosql-couchdb/src/test/java/org/eclipse/jnosql/databases/couchdb/communication/DefaultCouchDBDocumentManagerTest.java +++ b/jnosql-couchdb/src/test/java/org/eclipse/jnosql/databases/couchdb/communication/DefaultCouchDBDocumentManagerTest.java @@ -295,6 +295,19 @@ void shouldUpdateNull(){ }); } + @Test + void shouldInsertByteArray() { + CommunicationEntity entity = CommunicationEntity.of("Failure"); + entity.add(CouchDBConstant.ID, "id"); + entity.add("data", new byte[]{'a','b','c','d'}); + var communication = entityManager.insert(entity); + + SoftAssertions.assertSoftly(soft -> { + soft.assertThat(communication).isNotNull(); + soft.assertThat(communication.find("data").get().get()).isInstanceOf(byte[].class); + }); + } + private CommunicationEntity createDocumentList() { CommunicationEntity entity = CommunicationEntity.of("AppointmentBook"); List> documents = new ArrayList<>(); From 3c638d17d7a84d8ded7dfdce2624d9d7eee9b5b2 Mon Sep 17 00:00:00 2001 From: Otavio Santana Date: Fri, 28 Mar 2025 10:14:28 +0000 Subject: [PATCH 2/6] test: create test scenarion Signed-off-by: Otavio Santana --- .../communication/CouchdbDeleteQuery.java | 2 +- .../configuration/DocumentDatabase.java | 19 ++- .../communication/integration/Magazine.java | 25 ++++ .../integration/TemplateIntegrationTest.java | 128 ++++++++++++++++++ 4 files changed, 170 insertions(+), 4 deletions(-) create mode 100644 jnosql-couchdb/src/test/java/org/eclipse/jnosql/databases/couchdb/communication/integration/Magazine.java create mode 100644 jnosql-couchdb/src/test/java/org/eclipse/jnosql/databases/couchdb/communication/integration/TemplateIntegrationTest.java diff --git a/jnosql-couchdb/src/main/java/org/eclipse/jnosql/databases/couchdb/communication/CouchdbDeleteQuery.java b/jnosql-couchdb/src/main/java/org/eclipse/jnosql/databases/couchdb/communication/CouchdbDeleteQuery.java index 0e606c9e5..fc35c43c9 100644 --- a/jnosql-couchdb/src/main/java/org/eclipse/jnosql/databases/couchdb/communication/CouchdbDeleteQuery.java +++ b/jnosql-couchdb/src/main/java/org/eclipse/jnosql/databases/couchdb/communication/CouchdbDeleteQuery.java @@ -38,7 +38,7 @@ final class CouchdbDeleteQuery implements SelectQuery { @Override public long limit() { - return 10; + return 0; } @Override diff --git a/jnosql-couchdb/src/test/java/org/eclipse/jnosql/databases/couchdb/communication/configuration/DocumentDatabase.java b/jnosql-couchdb/src/test/java/org/eclipse/jnosql/databases/couchdb/communication/configuration/DocumentDatabase.java index 454588031..448d674af 100644 --- a/jnosql-couchdb/src/test/java/org/eclipse/jnosql/databases/couchdb/communication/configuration/DocumentDatabase.java +++ b/jnosql-couchdb/src/test/java/org/eclipse/jnosql/databases/couchdb/communication/configuration/DocumentDatabase.java @@ -21,6 +21,7 @@ import org.eclipse.jnosql.databases.couchdb.communication.CouchDBConfigurations; import org.eclipse.jnosql.databases.couchdb.communication.CouchDBDocumentConfiguration; import org.eclipse.jnosql.databases.couchdb.communication.CouchDBDocumentManagerFactory; +import org.jetbrains.annotations.NotNull; import org.testcontainers.containers.GenericContainer; import java.util.function.Supplier; @@ -40,10 +41,22 @@ public enum DocumentDatabase implements Supplier public CouchDBDocumentManagerFactory get() { CouchDBDocumentConfiguration configuration = new CouchDBDocumentConfiguration(); SettingsBuilder builder = Settings.builder(); - builder.put(CouchDBConfigurations.PORT, couchDB.getFirstMappedPort()); - builder.put(CouchDBConfigurations.USER, "admin"); - builder.put(CouchDBConfigurations.PASSWORD, "password"); + builder.put(CouchDBConfigurations.PORT, getPort()); + builder.put(CouchDBConfigurations.USER, getUser()); + builder.put(CouchDBConfigurations.PASSWORD, getPassword()); return configuration.apply(builder.build()); } + public String getPassword() { + return "password"; + } + + public String getUser() { + return "admin"; + } + + public Integer getPort() { + return couchDB.getFirstMappedPort(); + } + } diff --git a/jnosql-couchdb/src/test/java/org/eclipse/jnosql/databases/couchdb/communication/integration/Magazine.java b/jnosql-couchdb/src/test/java/org/eclipse/jnosql/databases/couchdb/communication/integration/Magazine.java new file mode 100644 index 000000000..2fcc2b858 --- /dev/null +++ b/jnosql-couchdb/src/test/java/org/eclipse/jnosql/databases/couchdb/communication/integration/Magazine.java @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2025 Contributors to the Eclipse Foundation + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * and Apache License v2.0 which accompanies this distribution. + * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html + * and the Apache License v2.0 is available at http://www.opensource.org/licenses/apache2.0.php. + * + * You may elect to redistribute this code under either of these licenses. + * + * Contributors: + * + * Otavio Santana + */ +package org.eclipse.jnosql.databases.couchdb.communication.integration; + +import jakarta.nosql.Column; +import jakarta.nosql.Entity; +import jakarta.nosql.Id; + +@Entity +public record Magazine(@Id String id, @Column("title") String title, @Column("edition") int edition) { + + +} diff --git a/jnosql-couchdb/src/test/java/org/eclipse/jnosql/databases/couchdb/communication/integration/TemplateIntegrationTest.java b/jnosql-couchdb/src/test/java/org/eclipse/jnosql/databases/couchdb/communication/integration/TemplateIntegrationTest.java new file mode 100644 index 000000000..88092d7ea --- /dev/null +++ b/jnosql-couchdb/src/test/java/org/eclipse/jnosql/databases/couchdb/communication/integration/TemplateIntegrationTest.java @@ -0,0 +1,128 @@ +/* + * Copyright (c) 2025 Contributors to the Eclipse Foundation + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * and Apache License v2.0 which accompanies this distribution. + * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html + * and the Apache License v2.0 is available at http://www.opensource.org/licenses/apache2.0.php. + * + * You may elect to redistribute this code under either of these licenses. + * + * Contributors: + * + * Otavio Santana + */ +package org.eclipse.jnosql.databases.couchdb.communication.integration; + + +import jakarta.inject.Inject; +import org.eclipse.jnosql.databases.couchdb.communication.CouchDBConfigurations; +import org.eclipse.jnosql.databases.couchdb.communication.configuration.DocumentDatabase; +import org.eclipse.jnosql.mapping.Database; +import org.eclipse.jnosql.mapping.core.Converters; +import org.eclipse.jnosql.mapping.core.config.MappingConfigurations; +import org.eclipse.jnosql.mapping.document.DocumentTemplate; +import org.eclipse.jnosql.mapping.document.spi.DocumentExtension; +import org.eclipse.jnosql.mapping.reflection.Reflections; +import org.eclipse.jnosql.mapping.reflection.spi.ReflectionEntityMetadataExtension; +import org.eclipse.jnosql.mapping.semistructured.EntityConverter; +import org.jboss.weld.junit5.auto.AddExtensions; +import org.jboss.weld.junit5.auto.AddPackages; +import org.jboss.weld.junit5.auto.EnableAutoWeld; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.condition.EnabledIfSystemProperty; + +import java.util.List; +import java.util.Optional; + +import static java.util.UUID.randomUUID; +import static org.assertj.core.api.Assertions.assertThat; +import static org.eclipse.jnosql.communication.driver.IntegrationTest.MATCHES; +import static org.eclipse.jnosql.communication.driver.IntegrationTest.NAMED; + +@EnableAutoWeld +@AddPackages(value = {Database.class, EntityConverter.class, DocumentTemplate.class}) +@AddPackages(Magazine.class) +@AddPackages(Reflections.class) +@AddPackages(Converters.class) +@AddExtensions({ReflectionEntityMetadataExtension.class, + DocumentExtension.class}) +@EnabledIfSystemProperty(named = NAMED, matches = MATCHES) +class TemplateIntegrationTest { + + static { + DocumentDatabase database = DocumentDatabase.INSTANCE; + System.setProperty(CouchDBConfigurations.PORT.get(), database.getPort().toString()); + System.setProperty(MappingConfigurations.DOCUMENT_DATABASE.get(), "library"); + System.setProperty(CouchDBConfigurations.USER.get(), database.getUser()); + System.setProperty(CouchDBConfigurations.PASSWORD.get(), database.getPassword()); + } + + @Inject + private DocumentTemplate template; + + @Test + void shouldFindById() { + Magazine magazine = new Magazine(randomUUID().toString(), "Effective Java", 1); + assertThat(template.insert(magazine)) + .isNotNull() + .isEqualTo(magazine); + + assertThat(template.find(Magazine.class, magazine.id())) + .isNotNull().get().isEqualTo(magazine); + } + + @Test + void shouldInsert() { + Magazine magazine = new Magazine(randomUUID().toString(), "Effective Java", 1); + template.insert(magazine); + Optional optional = template.find(Magazine.class, magazine.id()); + assertThat(optional).isNotNull().isNotEmpty() + .get().isEqualTo(magazine); + } + + @Test + void shouldUpdate() { + Magazine magazine = new Magazine(randomUUID().toString(), "Effective Java", 1); + assertThat(template.insert(magazine)) + .isNotNull() + .isEqualTo(magazine); + + Magazine updated = new Magazine(magazine.id(), magazine.title() + " updated", 2); + + assertThat(template.update(updated)) + .isNotNull() + .isNotEqualTo(magazine); + + assertThat(template.find(Magazine.class, magazine.id())) + .isNotNull().get().isEqualTo(updated); + + } + + @Test + void shouldDeleteById() { + Magazine magazine = new Magazine(randomUUID().toString(), "Effective Java", 1); + assertThat(template.insert(magazine)) + .isNotNull() + .isEqualTo(magazine); + + template.delete(Magazine.class, magazine.id()); + assertThat(template.find(Magazine.class, magazine.id())) + .isNotNull().isEmpty(); + } + + @Test + void shouldDeleteAll(){ + for (int index = 0; index < 20; index++) { + Magazine magazine = new Magazine(randomUUID().toString(), "Effective Java", index); + assertThat(template.insert(magazine)) + .isNotNull() + .isEqualTo(magazine); + } + + template.delete(Magazine.class).execute(); + var magazines = template.select(Magazine.class).result(); + assertThat(magazines).isNotNull().isEmpty(); + } + +} From 87670a4b4d601655fb78b689d093c91418730dc3 Mon Sep 17 00:00:00 2001 From: Otavio Santana Date: Fri, 28 Mar 2025 19:51:57 +0000 Subject: [PATCH 3/6] test: update failure and entity Signed-off-by: Otavio Santana --- .../couchdb/communication/integration/Failure.java | 12 ++++++++++++ .../integration/TemplateIntegrationTest.java | 12 ++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 jnosql-couchdb/src/test/java/org/eclipse/jnosql/databases/couchdb/communication/integration/Failure.java diff --git a/jnosql-couchdb/src/test/java/org/eclipse/jnosql/databases/couchdb/communication/integration/Failure.java b/jnosql-couchdb/src/test/java/org/eclipse/jnosql/databases/couchdb/communication/integration/Failure.java new file mode 100644 index 000000000..ab460a9ff --- /dev/null +++ b/jnosql-couchdb/src/test/java/org/eclipse/jnosql/databases/couchdb/communication/integration/Failure.java @@ -0,0 +1,12 @@ +package org.eclipse.jnosql.databases.couchdb.communication.integration; + +import jakarta.nosql.Column; +import jakarta.nosql.Entity; +import jakarta.nosql.Id; + +@Entity +public record Failure( + @Id String id, + @Column byte[] data) { + +} \ No newline at end of file diff --git a/jnosql-couchdb/src/test/java/org/eclipse/jnosql/databases/couchdb/communication/integration/TemplateIntegrationTest.java b/jnosql-couchdb/src/test/java/org/eclipse/jnosql/databases/couchdb/communication/integration/TemplateIntegrationTest.java index 88092d7ea..44b5fa22e 100644 --- a/jnosql-couchdb/src/test/java/org/eclipse/jnosql/databases/couchdb/communication/integration/TemplateIntegrationTest.java +++ b/jnosql-couchdb/src/test/java/org/eclipse/jnosql/databases/couchdb/communication/integration/TemplateIntegrationTest.java @@ -16,6 +16,7 @@ import jakarta.inject.Inject; +import org.assertj.core.api.SoftAssertions; import org.eclipse.jnosql.databases.couchdb.communication.CouchDBConfigurations; import org.eclipse.jnosql.databases.couchdb.communication.configuration.DocumentDatabase; import org.eclipse.jnosql.mapping.Database; @@ -125,4 +126,15 @@ void shouldDeleteAll(){ assertThat(magazines).isNotNull().isEmpty(); } + @Test + void shouldInsertByteArray() { + var failure = new Failure("test", new byte[]{'a','b','c','d'}); + template.insert(failure); + Optional entity = template.find(Failure.class, "test"); + SoftAssertions.assertSoftly(softly -> { + softly.assertThat(entity).isNotNull().isNotEmpty(); + softly.assertThat(entity).get().isEqualTo(failure); + }); + } + } From b0b5fd9184681013b3e2a90da97ac0337f8cc32d Mon Sep 17 00:00:00 2001 From: Otavio Santana Date: Fri, 28 Mar 2025 19:58:29 +0000 Subject: [PATCH 4/6] feat: include header to failture Signed-off-by: Otavio Santana --- .../couchdb/communication/integration/Failure.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/jnosql-couchdb/src/test/java/org/eclipse/jnosql/databases/couchdb/communication/integration/Failure.java b/jnosql-couchdb/src/test/java/org/eclipse/jnosql/databases/couchdb/communication/integration/Failure.java index ab460a9ff..359a9f36d 100644 --- a/jnosql-couchdb/src/test/java/org/eclipse/jnosql/databases/couchdb/communication/integration/Failure.java +++ b/jnosql-couchdb/src/test/java/org/eclipse/jnosql/databases/couchdb/communication/integration/Failure.java @@ -1,3 +1,17 @@ +/* + * Copyright (c) 2025 Contributors to the Eclipse Foundation + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * and Apache License v2.0 which accompanies this distribution. + * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html + * and the Apache License v2.0 is available at http://www.opensource.org/licenses/apache2.0.php. + * + * You may elect to redistribute this code under either of these licenses. + * + * Contributors: + * + * Otavio Santana + */ package org.eclipse.jnosql.databases.couchdb.communication.integration; import jakarta.nosql.Column; From 7f2dd05d3242318ed0fe51d4066f7bdb59522223 Mon Sep 17 00:00:00 2001 From: Otavio Santana Date: Sat, 29 Mar 2025 04:57:35 +0000 Subject: [PATCH 5/6] test: update template integration to coachdb Signed-off-by: Otavio Santana --- .../communication/integration/TemplateIntegrationTest.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/jnosql-couchdb/src/test/java/org/eclipse/jnosql/databases/couchdb/communication/integration/TemplateIntegrationTest.java b/jnosql-couchdb/src/test/java/org/eclipse/jnosql/databases/couchdb/communication/integration/TemplateIntegrationTest.java index 44b5fa22e..e7fe1840c 100644 --- a/jnosql-couchdb/src/test/java/org/eclipse/jnosql/databases/couchdb/communication/integration/TemplateIntegrationTest.java +++ b/jnosql-couchdb/src/test/java/org/eclipse/jnosql/databases/couchdb/communication/integration/TemplateIntegrationTest.java @@ -133,8 +133,10 @@ void shouldInsertByteArray() { Optional entity = template.find(Failure.class, "test"); SoftAssertions.assertSoftly(softly -> { softly.assertThat(entity).isNotNull().isNotEmpty(); - softly.assertThat(entity).get().isEqualTo(failure); + softly.assertThat(entity).map(Failure::id).get().isEqualTo("test"); + softly.assertThat(entity).map(Failure::data).get().isEqualTo(failure.data()); }); } } + From 013766e9a6bcb8522cb24e4428c3eff814b9d221 Mon Sep 17 00:00:00 2001 From: Otavio Santana Date: Sat, 29 Mar 2025 05:03:02 +0000 Subject: [PATCH 6/6] docs: update changelog Signed-off-by: Otavio Santana --- CHANGELOG.adoc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc index 787e14ff7..b4cfaba51 100644 --- a/CHANGELOG.adoc +++ b/CHANGELOG.adoc @@ -8,6 +8,10 @@ and this project adheres to https://semver.org/spec/v2.0.0.html[Semantic Version == [Unreleased] +=== Fixed + +- Fixes delete all at CouchDB + == [1.1.6] - 2025-03-24 == [1.1.5] - 2025-03-23