/
Chebarik
/
PackageManagement
Обзор
Документация
Войти
/
Chebarik
/
PackageManagement
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/test/java/com/packagemanagement/domain/model/PackageVersionTest.java
160 строк
5 KB
Николай Мехоношин
added unit tests
13 янв 2026, 20:50
13 янв 2026, 20:50
d22b6a7
Код
Авторство
О чём код?
package com.packagemanagement.domain.model; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import java.time.Instant; import static org.junit.jupiter.api.Assertions.*; @DisplayName("PackageVersion Entity") class PackageVersionTest { @Nested @DisplayName("Creation") class Creation { @Test @DisplayName("should create version with factory method") void shouldCreateVersionWithFactoryMethod() { PackageVersion version = PackageVersion.create("1.0.0", 1024L, "abc123hash"); assertNotNull(version); assertNotNull(version.getId()); assertEquals("1.0.0", version.getVersionNumber()); assertEquals(1024L, version.getSize()); assertEquals("abc123hash", version.getHash()); assertEquals(VersionStatus.DRAFT, version.getStatus()); assertNotNull(version.getPublishedDate()); } @Test @DisplayName("should create version with builder") void shouldCreateVersionWithBuilder() { Instant now = Instant.now(); PackageVersion version = PackageVersion.builder() .id("version-id") .versionNumber("2.0.0") .publishedDate(now) .size(2048L) .hash("xyz789hash") .status(VersionStatus.PUBLISHED) .build(); assertEquals("version-id", version.getId()); assertEquals("2.0.0", version.getVersionNumber()); assertEquals(now, version.getPublishedDate()); assertEquals(2048L, version.getSize()); assertEquals("xyz789hash", version.getHash()); assertEquals(VersionStatus.PUBLISHED, version.getStatus()); } @Test @DisplayName("should throw exception when required fields are missing") void shouldThrowExceptionWhenRequiredFieldsMissing() { assertThrows(NullPointerException.class, () -> PackageVersion.builder() .versionNumber("1.0.0") .build() ); } } @Nested @DisplayName("Status Management") class StatusManagement { @Test @DisplayName("should publish draft version") void shouldPublishDraftVersion() { PackageVersion version = PackageVersion.create("1.0.0", 1024L, "hash"); version.publish(); assertEquals(VersionStatus.PUBLISHED, version.getStatus()); assertTrue(version.isPublished()); } @Test @DisplayName("should archive version") void shouldArchiveVersion() { PackageVersion version = PackageVersion.create("1.0.0", 1024L, "hash"); version.publish(); version.archive(); assertEquals(VersionStatus.ARCHIVED, version.getStatus()); } @Test @DisplayName("should not publish archived version") void shouldNotPublishArchivedVersion() { PackageVersion version = PackageVersion.create("1.0.0", 1024L, "hash"); version.archive(); assertThrows(IllegalStateException.class, version::publish); } } @Nested @DisplayName("Deletion Rules") class DeletionRules { @Test @DisplayName("draft version can be deleted") void draftVersionCanBeDeleted() { PackageVersion version = PackageVersion.create("1.0.0", 1024L, "hash"); assertTrue(version.canBeDeleted()); } @Test @DisplayName("published version can be deleted (MVP)") void publishedVersionCanBeDeleted() { PackageVersion version = PackageVersion.create("1.0.0", 1024L, "hash"); version.publish(); assertTrue(version.canBeDeleted()); } @Test @DisplayName("archived version can be deleted") void archivedVersionCanBeDeleted() { PackageVersion version = PackageVersion.create("1.0.0", 1024L, "hash"); version.archive(); assertTrue(version.canBeDeleted()); } } @Nested @DisplayName("Equality") class Equality { @Test @DisplayName("versions with same id should be equal") void versionsWithSameIdShouldBeEqual() { Instant now = Instant.now(); PackageVersion v1 = PackageVersion.builder() .id("same-id") .versionNumber("1.0.0") .publishedDate(now) .size(1024L) .hash("hash1") .build(); PackageVersion v2 = PackageVersion.builder() .id("same-id") .versionNumber("2.0.0") .publishedDate(now) .size(2048L) .hash("hash2") .build(); assertEquals(v1, v2); } } }