131 lines
4.2 KiB
Nim
131 lines
4.2 KiB
Nim
## Test suite for migration tools
|
|
## Task 42: Implement migration tools
|
|
|
|
import unittest, os, strutils, times, sequtils
|
|
import ../src/nimpak/migration
|
|
import ../src/nimpak/cas
|
|
|
|
suite "Migration Tools Tests":
|
|
|
|
var testDir: string
|
|
var mm: MigrationManager
|
|
|
|
setup:
|
|
testDir = getTempDir() / "nip_migration_test_" & $epochTime().int
|
|
createDir(testDir)
|
|
mm = initMigrationManager(testDir / "cas", dryRun = true, verbose = false)
|
|
|
|
teardown:
|
|
removeDir(testDir)
|
|
|
|
test "Migration manager initialization":
|
|
check mm.dryRun == true
|
|
check mm.verbose == false
|
|
|
|
test "Legacy NIP migration - missing directory":
|
|
let result = mm.migrateLegacyNip("/nonexistent/path")
|
|
|
|
check result.success == false
|
|
check result.source == OldNip
|
|
check result.errors.len > 0
|
|
check result.errors[0].contains("not found")
|
|
|
|
test "Legacy NIP migration - valid directory":
|
|
# Create a mock legacy NIP structure
|
|
let legacyDir = testDir / "legacy-app"
|
|
createDir(legacyDir)
|
|
createDir(legacyDir / "bin") # Create bin directory first
|
|
writeFile(legacyDir / "manifest.kdl", "name \"test-app\"\nversion \"1.0.0\"")
|
|
writeFile(legacyDir / "bin" / "app", "#!/bin/sh\necho hello")
|
|
|
|
let result = mm.migrateLegacyNip(legacyDir)
|
|
|
|
check result.source == OldNip
|
|
check result.packageName == "legacy-app"
|
|
# In dry-run mode, no actual migration happens
|
|
check result.success == true or result.errors.len == 0
|
|
|
|
test "Flatpak migration - not installed":
|
|
let result = mm.migrateFlatpak("org.nonexistent.app")
|
|
|
|
check result.success == false
|
|
check result.source == Flatpak
|
|
check result.errors.anyIt(it.contains("not found"))
|
|
|
|
test "AppImage migration - file not found":
|
|
let result = mm.migrateAppImage("/nonexistent/app.AppImage")
|
|
|
|
check result.success == false
|
|
check result.source == AppImage
|
|
check result.errors.anyIt(it.contains("not found"))
|
|
|
|
test "Docker migration placeholder":
|
|
let result = mm.migrateDockerImage("alpine:latest")
|
|
|
|
check result.source == Docker
|
|
check result.packageName == "alpine-latest"
|
|
# Placeholder always succeeds
|
|
check result.success == true
|
|
check result.warnings.len > 0
|
|
|
|
test "Nix migration - invalid path":
|
|
let result = mm.migrateNixPackage("/invalid/path")
|
|
|
|
check result.success == false
|
|
check result.source == Nix
|
|
check result.errors.anyIt(it.contains("Invalid Nix store path"))
|
|
|
|
test "Format conversion - NPK to NIP":
|
|
let result = mm.convertNpkToNip("/path/to/package.npk")
|
|
|
|
check result.success == true # Placeholder
|
|
check result.warnings.len > 0
|
|
|
|
test "Format conversion - NIP to NEXTER":
|
|
let result = mm.convertNipToNexter("/path/to/app.nip")
|
|
|
|
check result.success == true # Placeholder
|
|
check result.warnings.len > 0
|
|
|
|
test "Migration report generation":
|
|
let results = @[
|
|
MigrationResult(success: true, source: OldNip, packageName: "app1", casHashes: @["h1", "h2"], errors: @[], warnings: @[]),
|
|
MigrationResult(success: false, source: Flatpak, packageName: "app2", casHashes: @[], errors: @["Error"], warnings: @[]),
|
|
MigrationResult(success: true, source: Docker, packageName: "app3", casHashes: @["h3"], errors: @[], warnings: @["Warning"])
|
|
]
|
|
|
|
let report = generateMigrationReport(results)
|
|
|
|
check report.contains("Migration Report")
|
|
check report.contains("Total migrations: 3")
|
|
check report.contains("Successful: 2")
|
|
check report.contains("Failed: 1")
|
|
check report.contains("app1")
|
|
check report.contains("app2")
|
|
check report.contains("app3")
|
|
check report.contains("✅")
|
|
check report.contains("❌")
|
|
|
|
test "Migration verification - empty result":
|
|
let emptyResult = MigrationResult(
|
|
success: true,
|
|
source: OldNip,
|
|
packageName: "empty",
|
|
casHashes: @[],
|
|
errors: @[]
|
|
)
|
|
|
|
# Empty migration with no objects should verify
|
|
check mm.verifyMigration(emptyResult) == true
|
|
|
|
test "Migration verification - failed result":
|
|
let failedResult = MigrationResult(
|
|
success: false,
|
|
source: OldNip,
|
|
packageName: "failed",
|
|
casHashes: @[],
|
|
errors: @["Something went wrong"]
|
|
)
|
|
|
|
check mm.verifyMigration(failedResult) == false
|