Files
museum-digital-webdav-uploader/src/configloader/configloader_test.go
Joshua Ramon Enslin 7cfd3bb1de First working version
- Move from separate dirs for upload to a unified one (identify
  media/metadata files by file extension)
- Prevent uploading when an import is already scheduled
- Allow setting custom, parser-specific settings
- Add CLI
- Implement WebDAV upload
- Implement checking of upload folders for uploadable contents

Close #6, close #7, close #9, close #3, close #1, close #4
2025-02-27 17:29:20 +01:00

174 lines
5.1 KiB
Go

package configloader
import (
"testing"
"os"
"path/filepath"
)
// Returns a generally valid config. Single values can then be
// replaced with the actually tested contents.
func getTestConfig() MDWebDavUploaderConfig {
input := MDWebDavUploaderConfig{}
input.InstanceLink = "https://hessen.museum-digital.de/home"
input.Mail = "test@example.com"
input.InstitutionId = 1;
input.Parser = "Lido"
tmpDir := os.TempDir()
testDir := filepath.Join(tmpDir, "/existing-dir-for-import")
mkdirErr := os.MkdirAll(testDir, os.ModePerm)
if mkdirErr != nil {
panic("Test failure: Failed to create test dir")
}
input.UploadDir = testDir
return input
}
// Test that ValidateConfig() fails on non-URLs.
func TestValidateUploaderConfigFailsOnInvalidInstanceUrl(t *testing.T) {
input := getTestConfig()
input.InstanceLink = "abcmuseum-digital.org"
_, err := ValidateConfig(input)
if err == nil {
t.Fatalf("ValidateConfig() does not return an error on a non-URL (via ValidateInstanceLink)")
}
}
// Test that ValidateConfig cleans an instance URL as per ValidateInstanceLink().
func TestValidateUploaderConfigCleansInstanceViaValidateInstanceLink(t *testing.T) {
input := getTestConfig()
input.InstanceLink = "https://hessen.museum-digital.de/home"
returnVal, _ := ValidateConfig(input)
if returnVal.InstanceLink != "https://hessen.museum-digital.de" {
t.Fatalf("Failed to clean up input URL")
}
}
// Test that ValidateConfig() fails on invalid mail.
func TestValidateUploaderConfigFailsOnInvalidMail(t *testing.T) {
input := getTestConfig()
input.Mail = "test"
_, err := ValidateConfig(input)
if err == nil {
t.Fatalf("ValidateConfig() does not return an error on a mail address")
}
}
// Test that ValidateConfig() accepts a valid mail address.
func TestValidateUploaderConfigAcceptsValidMail(t *testing.T) {
input := getTestConfig()
input.Mail = "test@example.com"
returnVal, _ := ValidateConfig(input)
if returnVal.Mail != "test@example.com" {
t.Fatalf("Failed to accept valid mail")
}
}
// Test that ValidateConfig() fails on negative / invalid IDs.
func TestValidateUploaderConfigFailsOnInvalidInstitutionId(t *testing.T) {
input := getTestConfig()
input.InstitutionId = -1
_, err := ValidateConfig(input)
if err == nil {
t.Fatalf("ValidateConfig() does not return an error on an invalid institution ID")
}
}
// Test that ValidateConfig() accepts valid institution IDs.
func TestValidateUploaderConfigAcceptsValidInstitutionId(t *testing.T) {
input := getTestConfig()
input.InstitutionId = 1
returnVal, _ := ValidateConfig(input)
if returnVal.InstitutionId != 1 {
t.Fatalf("Failed to accept valid institution ID")
}
}
// Test that ValidateConfig() fails on negative / invalid IDs.
func TestValidateUploaderConfigFailsOnInvalidParser(t *testing.T) {
input := getTestConfig()
input.Parser = "nonexistentparser"
_, err := ValidateConfig(input)
if err == nil {
t.Fatalf("ValidateConfig() does not return an error on an invalid parser")
}
}
// Test that ValidateConfig() accepts valid ParserDs.
func TestValidateUploaderConfigAcceptsValidParser(t *testing.T) {
input := getTestConfig()
input.Parser = "ParserLido"
returnVal, _ := ValidateConfig(input)
if returnVal.Parser != "Lido" {
t.Fatalf("Failed to accept and clean valid parser")
}
}
// Test that ValidateConfig() fails on non-existent folder.
func TestValidateUploaderConfigFailsOnInvalidUploadDir(t *testing.T) {
input := getTestConfig()
input.UploadDir = "nonexistentfolder"
_, err := ValidateConfig(input)
if err == nil {
t.Fatalf("ValidateConfig() does not return an error on an invalid upload folder")
}
}
// Test that saving and reading config works.
func TestWritingAndReadingConfigWorks(t *testing.T) {
input := getTestConfig()
input, _ = ValidateConfig(input)
writeErr := StoreConfigToFile(input, input.UploadDir + "/config.json")
if writeErr != nil {
t.Log("Error:")
t.Log(writeErr)
t.Fatalf("Failed to write config to override path")
}
loadedFromFile, setupRequired, err := LoadFromFile(input.UploadDir + "/config.json")
if setupRequired != false {
t.Fatalf("Expected no setup to be required, but return value indicated thus")
}
if err != nil {
t.Fatalf("Returned an error on trying to load config file")
}
// Golang can't compare structs with slices or maps
if input.InstanceLink != loadedFromFile.InstanceLink || input.Mail != loadedFromFile.Mail || input.WebDavAuthToken != loadedFromFile.WebDavAuthToken || input.InstitutionId != loadedFromFile.InstitutionId || input.Parser != loadedFromFile.Parser || input.UploadDir != loadedFromFile.UploadDir || input.PublishOnImport != loadedFromFile.PublishOnImport {
t.Log("Input")
t.Log(input)
t.Log("Loaded output")
t.Log(loadedFromFile)
t.Fatalf("Failed to write and then load the same config")
}
}