diff --git a/coverage-badge.svg b/coverage-badge.svg
index 1dac990..0001913 100644
--- a/coverage-badge.svg
+++ b/coverage-badge.svg
@@ -2,5 +2,5 @@
coverage
- 38.6%
+ 57.4%
diff --git a/tests/integration/reposervice_forceupdate_test.go b/tests/integration/reposervice_forceupdate_test.go
new file mode 100644
index 0000000..a0f157c
--- /dev/null
+++ b/tests/integration/reposervice_forceupdate_test.go
@@ -0,0 +1,114 @@
+package integration
+
+import (
+ "io"
+ "os"
+ "path"
+ "testing"
+
+ "code.alt-gnome.ru/aides-infra/aides-repo-api/internal/models"
+ "code.alt-gnome.ru/aides-infra/aides-repo-api/internal/services/reposervice"
+ "github.com/stretchr/testify/assert"
+)
+
+func TestRepoService_ForceUpdate(t *testing.T) {
+ db := prepareDb(t)
+ config := prepareConfig()
+
+ os.MkdirAll(config.GetUploadDir(), os.ModePerm)
+
+ taskPath := path.Join(config.GetUploadDir(), "tasks/1")
+
+ os.MkdirAll(taskPath, os.ModePerm)
+ defer os.RemoveAll(config.GetUploadDir())
+
+ fileName := "example-foo-1.0.0-alt1.x86_64.rpm"
+
+ source, err := os.Open(path.Join("./test_rpms", fileName))
+ assert.NoError(t, err)
+ destination, err := os.Create(path.Join(taskPath, fileName))
+ assert.NoError(t, err)
+ defer destination.Close()
+ _, err = io.Copy(destination, source)
+
+ source.Close()
+ destination.Close()
+
+ gitRepo := &models.GitRepo{
+ Name: "example-foo",
+ }
+
+ altRepo := &models.ALTRepo{
+ Name: "Sisyphus",
+ }
+
+ db.Create(&models.GitRepoAltRepoTask{
+ Repo: gitRepo,
+ ALTRepo: altRepo,
+ CurrentTask: &models.Task{
+ Status: models.StatusCompleted,
+ Files: []models.RPMFile{
+ {
+ Filename: "---",
+ Name: "example-foo",
+ Version: "0.9.9",
+ Release: "1",
+ Arch: "x86_64",
+ Epoch: 0,
+ },
+ },
+ },
+ LastTask: &models.Task{
+ Status: models.StatusCompleted,
+ Files: []models.RPMFile{
+ {
+ Filename: fileName,
+ Name: "example-foo",
+ Version: "1.0.0",
+ Release: "1",
+ Arch: "x86_64",
+ Epoch: 0,
+ },
+ },
+ },
+ })
+
+ service := reposervice.New(
+ db,
+ config,
+ )
+
+ // EXECUTE
+ err = service.ForceUpdate()
+
+ assert.NoError(t, err)
+ // TODO: check db
+ repoBasePath := path.Join(config.GetUploadDir(), "repo", "Sisyphus")
+ x86_64BasePath := path.Join(repoBasePath, "x86_64", "base")
+ x86_64RPMSPath := path.Join(repoBasePath, "x86_64", "RPMS.aides")
+ noarchBasePath := path.Join(repoBasePath, "noarch", "base")
+
+ expectedFiles := []string{
+ path.Join(x86_64BasePath, "pkglist.aides"),
+ path.Join(x86_64BasePath, "pkglist.aides.bz2"),
+ path.Join(x86_64BasePath, "pkglist.aides.xz"),
+ path.Join(x86_64BasePath, "release"),
+ path.Join(x86_64BasePath, "release.aides"),
+ path.Join(x86_64RPMSPath, fileName),
+ path.Join(noarchBasePath, "pkglist.aides"),
+ path.Join(noarchBasePath, "pkglist.aides.bz2"),
+ path.Join(noarchBasePath, "pkglist.aides.xz"),
+ path.Join(noarchBasePath, "release"),
+ path.Join(noarchBasePath, "release.aides"),
+ }
+
+ for _, filePath := range expectedFiles {
+ _, err := os.Stat(filePath)
+ assert.NoErrorf(t, err, "Файл %s не найден", filePath)
+ }
+
+ rpmPath := path.Join(x86_64RPMSPath, fileName)
+ linkDest, err := os.Readlink(rpmPath)
+ assert.NoError(t, err)
+ assert.Equal(t, path.Join("../../../../tasks/1", fileName), linkDest)
+}