@@ -2,13 +2,10 @@ import XCTest
2@testable import ParseableViewer
2@testable import ParseableViewer
4final class ConnectionStoreTests: XCTestCase {
4final class ConnectionStoreTests: XCTestCase {
5− private let testSuiteKey = "parseable_connections_test"
7 override func tearDown() {
5 override func tearDown() {
8 super.tearDown()
6 super.tearDown()
9− // Clean up any test data from UserDefaults
7+ KeychainService.deleteData(for: "parseable_connections_list")
10− UserDefaults.standard.removeObject(forKey: "parseable_connections")
11− UserDefaults.standard.removeObject(forKey: "parseable_active_connection_id")
8+ KeychainService.deleteData(for: "parseable_active_connection_id")
14 func testSaveNilActiveConnectionID() {
11 func testSaveNilActiveConnectionID() {
@@ -20,7 +17,7 @@ final class ConnectionStoreTests: XCTestCase {
22 func testLoadActiveConnectionIDWhenEmpty() {
19 func testLoadActiveConnectionIDWhenEmpty() {
23− UserDefaults.standard.removeObject(forKey: "parseable_active_connection_id")
20+ KeychainService.deleteData(for: "parseable_active_connection_id")
24 let loaded = ConnectionStore.loadActiveConnectionID()
21 let loaded = ConnectionStore.loadActiveConnectionID()
25 XCTAssertNil(loaded)
22 XCTAssertNil(loaded)
@@ -28,35 +25,12 @@ final class ConnectionStoreTests: XCTestCase {
28 // MARK: - Connection persistence
25 // MARK: - Connection persistence
30 func testLoadConnectionsWhenEmpty() {
27 func testLoadConnectionsWhenEmpty() {
31− UserDefaults.standard.removeObject(forKey: "parseable_connections")
28+ KeychainService.deleteData(for: "parseable_connections_list")
32 let connections = ConnectionStore.loadConnections()
29 let connections = ConnectionStore.loadConnections()
33 XCTAssertTrue(connections.isEmpty)
30 XCTAssertTrue(connections.isEmpty)
36− func testSaveAndLoadConnections() {
33+ func testPasswordNotInKeychainConnectionData() {
37− let connection = ServerConnection(
39− url: "https://logs.example.com",
41− password: "secret123"
43− ConnectionStore.saveConnections([connection])
44− let loaded = ConnectionStore.loadConnections()
45− XCTAssertEqual(loaded.count, 1)
46− XCTAssertEqual(loaded[0].name, "Test Server")
47− XCTAssertEqual(loaded[0].url, "https://logs.example.com")
48− XCTAssertEqual(loaded[0].username, "admin")
51− func testSaveMultipleConnections() {
52− let c1 = ServerConnection(name: "Prod", url: "https://prod.example.com", username: "admin", password: "p1")
53− let c2 = ServerConnection(name: "Dev", url: "https://dev.example.com", username: "dev", password: "p2")
54− ConnectionStore.saveConnections([c1, c2])
55− let loaded = ConnectionStore.loadConnections()
56− XCTAssertEqual(loaded.count, 2)
59− func testPasswordNotInUserDefaults() {
60 let connection = ServerConnection(
34 let connection = ServerConnection(
61 name: "Test",
35 name: "Test",
62 url: "https://example.com",
36 url: "https://example.com",
@@ -65,12 +39,11 @@ final class ConnectionStoreTests: XCTestCase {
66 ConnectionStore.saveConnections([connection])
40 ConnectionStore.saveConnections([connection])
68− // Verify password is NOT in the UserDefaults data
42+ // Verify password is NOT in the connections list data
69− if let data = UserDefaults.standard.data(forKey: "parseable_connections"),
43+ if let data = KeychainService.loadData(for: "parseable_connections_list"),
70 let jsonString = String(data: data, encoding: .utf8) {
44 let jsonString = String(data: data, encoding: .utf8) {
71 XCTAssertFalse(jsonString.contains("supersecret"),
45 XCTAssertFalse(jsonString.contains("supersecret"),
72− "Password should not be stored in UserDefaults JSON")
46+ "Password should not be stored in connection list JSON")