package center.timemachine.cloud import kotlin.test.Test import kotlin.test.assertEquals import kotlin.test.assertFailsWith import kotlin.test.assertFalse import kotlin.test.assertTrue class ArgsTest { @Test fun `parses required url and applies defaults`() { val a = parseArgs(arrayOf("--url=https://cloud.tm.center")) assertEquals("https://cloud.tm.center", a.url) assertTrue(a.allowDownload) assertFalse(a.headless) // default token file lives under /.cloud-sync/token assertTrue(a.tokenFile.endsWith(".cloud-sync/token")) } @Test fun `url required`() { val ex = assertFailsWith { parseArgs(emptyArray()) } assertTrue(ex.message!!.contains("--url")) } @Test fun `space-separated values work`() { val a = parseArgs(arrayOf("--url", "https://x", "--pack-folder", "/srv/mc")) assertEquals("https://x", a.url) assertEquals("/srv/mc", a.packFolder.toString()) } @Test fun `inline values work`() { val a = parseArgs(arrayOf("--url=https://x", "--pack-folder=/srv/mc")) assertEquals("https://x", a.url) assertEquals("/srv/mc", a.packFolder.toString()) } @Test fun `no-gui flag`() { val a = parseArgs(arrayOf("--url=https://x", "-g")) assertTrue(a.headless) val b = parseArgs(arrayOf("--url=https://x", "--no-gui")) assertTrue(b.headless) } @Test fun `no-download flag disables fetch`() { val a = parseArgs(arrayOf("--url=https://x", "--no-download")) assertFalse(a.allowDownload) } @Test fun `unknown flag rejected`() { val ex = assertFailsWith { parseArgs(arrayOf("--url=https://x", "--bogus=foo")) } assertTrue(ex.message!!.contains("--bogus")) } @Test fun `bool flag with inline value rejected`() { val ex = assertFailsWith { parseArgs(arrayOf("--url=https://x", "--no-download=yes")) } assertTrue(ex.message!!.contains("does not take a value")) } @Test fun `missing value for non-bool flag rejected`() { val ex = assertFailsWith { parseArgs(arrayOf("--url=https://x", "--pack-folder")) } assertTrue(ex.message!!.contains("requires a value")) } @Test fun `custom token-file overrides default`() { val a = parseArgs(arrayOf( "--url=https://x", "--pack-folder=/srv/mc", "--token-file=/etc/cloud-creds", )) assertEquals("/etc/cloud-creds", a.tokenFile.toString()) } @Test fun `restic-binary override accepted`() { val a = parseArgs(arrayOf("--url=https://x", "--restic-binary=/opt/restic")) assertEquals("/opt/restic", a.resticBinary!!.toString()) } }