|
16 | 16 |
|
17 | 17 | use PluginTests\TestCase; |
18 | 18 | use PluginTests\Mocks\FunctionMocks; |
| 19 | +use PluginTests\StreamWrapper\UnraidStreamWrapper; |
19 | 20 |
|
20 | 21 |
|
21 | 22 | require_once '/usr/local/emhttp/plugins/compose.manager/include/Util.php'; |
@@ -1057,6 +1058,92 @@ public function testSetStackSettingsRejectsUnsupportedIconUrlTypes(): void |
1057 | 1058 | } |
1058 | 1059 | } |
1059 | 1060 |
|
| 1061 | + // =========================================== |
| 1062 | + // getSavedUpdateStatus Action Tests |
| 1063 | + // =========================================== |
| 1064 | + |
| 1065 | + /** |
| 1066 | + * Returns dockerVersionsInstalled=false when the plugin directory is absent. |
| 1067 | + */ |
| 1068 | +public function testGetSavedUpdateStatusDockerVersionsNotInstalled(): void |
| 1069 | +{ |
| 1070 | + @unlink(COMPOSE_UPDATE_STATUS_FILE); |
| 1071 | + |
| 1072 | + // Make the test deterministic even when running on a host that has docker.versions installed. |
| 1073 | + $fakeDir = sys_get_temp_dir() . '/fake_docker_versions_absent_' . getmypid(); |
| 1074 | + UnraidStreamWrapper::addMapping('/usr/local/emhttp/plugins/docker.versions', $fakeDir); |
| 1075 | + |
| 1076 | + $output = $this->executeAction('getSavedUpdateStatus'); |
| 1077 | + $result = json_decode($output, true); |
| 1078 | + |
| 1079 | + $this->assertIsArray($result); |
| 1080 | + $this->assertEquals('success', $result['result']); |
| 1081 | + $this->assertSame([], $result['stacks']); |
| 1082 | + $this->assertFalse($result['dockerVersionsInstalled']); |
| 1083 | + } |
| 1084 | + |
| 1085 | + /** |
| 1086 | + * Returns dockerVersionsInstalled=true when the plugin directory exists. |
| 1087 | + */ |
| 1088 | + public function testGetSavedUpdateStatusDockerVersionsInstalled(): void |
| 1089 | + { |
| 1090 | + @unlink(COMPOSE_UPDATE_STATUS_FILE); |
| 1091 | + |
| 1092 | + $fakeDir = sys_get_temp_dir() . '/fake_docker_versions_' . getmypid(); |
| 1093 | + mkdir($fakeDir, 0755, true); |
| 1094 | + $this->externalCleanupPaths[] = $fakeDir; |
| 1095 | + UnraidStreamWrapper::addMapping('/usr/local/emhttp/plugins/docker.versions', $fakeDir); |
| 1096 | + |
| 1097 | + $output = $this->executeAction('getSavedUpdateStatus'); |
| 1098 | + $result = json_decode($output, true); |
| 1099 | + |
| 1100 | + $this->assertIsArray($result); |
| 1101 | + $this->assertEquals('success', $result['result']); |
| 1102 | + $this->assertSame([], $result['stacks']); |
| 1103 | + $this->assertTrue($result['dockerVersionsInstalled']); |
| 1104 | + } |
| 1105 | + |
| 1106 | + /** |
| 1107 | + * Returns saved stacks alongside dockerVersionsInstalled when a status file exists. |
| 1108 | + */ |
| 1109 | + public function testGetSavedUpdateStatusIncludesSavedStacks(): void |
| 1110 | + { |
| 1111 | + $savedStatus = ['my-stack' => ['hasUpdate' => true, 'containers' => []]]; |
| 1112 | + file_put_contents(COMPOSE_UPDATE_STATUS_FILE, json_encode($savedStatus)); |
| 1113 | + |
| 1114 | + $fakeDir = sys_get_temp_dir() . '/fake_docker_versions_' . getmypid(); |
| 1115 | + mkdir($fakeDir, 0755, true); |
| 1116 | + $this->externalCleanupPaths[] = $fakeDir; |
| 1117 | + UnraidStreamWrapper::addMapping('/usr/local/emhttp/plugins/docker.versions', $fakeDir); |
| 1118 | + |
| 1119 | + $output = $this->executeAction('getSavedUpdateStatus'); |
| 1120 | + $result = json_decode($output, true); |
| 1121 | + |
| 1122 | + $this->assertIsArray($result); |
| 1123 | + $this->assertEquals('success', $result['result']); |
| 1124 | + $this->assertEquals($savedStatus, $result['stacks']); |
| 1125 | + $this->assertTrue($result['dockerVersionsInstalled']); |
| 1126 | + |
| 1127 | + @unlink(COMPOSE_UPDATE_STATUS_FILE); |
| 1128 | + } |
| 1129 | + |
| 1130 | + /** |
| 1131 | + * Falls back to empty stacks when the status file contains invalid JSON. |
| 1132 | + */ |
| 1133 | + public function testGetSavedUpdateStatusHandlesInvalidStatusFile(): void |
| 1134 | + { |
| 1135 | + file_put_contents(COMPOSE_UPDATE_STATUS_FILE, 'not-valid-json'); |
| 1136 | + |
| 1137 | + $output = $this->executeAction('getSavedUpdateStatus'); |
| 1138 | + $result = json_decode($output, true); |
| 1139 | + |
| 1140 | + $this->assertIsArray($result); |
| 1141 | + $this->assertEquals('success', $result['result']); |
| 1142 | + $this->assertSame([], $result['stacks']); |
| 1143 | + |
| 1144 | + @unlink(COMPOSE_UPDATE_STATUS_FILE); |
| 1145 | + } |
| 1146 | + |
1060 | 1147 | // =========================================== |
1061 | 1148 | // checkStackLock Action Tests |
1062 | 1149 | // =========================================== |
|
0 commit comments