Skip to content

Commit

Permalink
Merge pull request #102 from MetaMask/session-manager-tests
Browse files Browse the repository at this point in the history
feature: Session manager tests
  • Loading branch information
elefantel authored Nov 13, 2023
2 parents 25f5bbe + 31ce5c1 commit 5ea02d5
Show file tree
Hide file tree
Showing 2 changed files with 85 additions and 5 deletions.
76 changes: 76 additions & 0 deletions Example/Tests/SessionManagerTests.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
//
// SessionManagerTests.swift
// metamask-ios-sdk_Tests
//

import XCTest
import metamask_ios_sdk

class SessionManagerTests: XCTestCase {
var keychain: SecureStore!
var sessionManager: SessionManager!
let sessionDuration: TimeInterval = 3600

override func setUp() {
super.setUp()
keychain = Keychain(service: "com.example.testKeychain")
sessionManager = SessionManager(store: keychain, sessionDuration: sessionDuration)
}

override func tearDown() {
super.tearDown()
}

func testInitiallyNoSessionExists() {
let fetchCurrentSessionConfig = sessionManager.fetchCurrentSessionConfig()
XCTAssertNil(fetchCurrentSessionConfig)
}

func testNewSessionConfigIsValid() {
sessionManager.createNewSessionConfig()
guard let newSessionConfig = sessionManager.fetchCurrentSessionConfig() else {
XCTFail("Could not create new session")
return
}
XCTAssertTrue(newSessionConfig.isValid)
}

func testClearSessionDeletesCurrentSession() {
sessionManager.createNewSessionConfig()

let sessionConfig = sessionManager.fetchCurrentSessionConfig()
XCTAssertNotNil(sessionConfig)

sessionManager.clear()

let newSessionConfig = sessionManager.fetchCurrentSessionConfig()
XCTAssertNil(newSessionConfig)
}

func testFetchSessionAfterClearReturnsNewSession() {
sessionManager.createNewSessionConfig()

let sessionConfig = sessionManager.fetchCurrentSessionConfig()

sessionManager.clear()

let newSessionConfig = sessionManager.fetchCurrentSessionConfig()
XCTAssertNotEqual(sessionConfig?.sessionId, newSessionConfig?.sessionId)
}

func testFetchSessionAfterSettingInvalidSessionCreatesANewValidSession() {
sessionManager = SessionManager(store: keychain, sessionDuration: -sessionDuration)
sessionManager.createNewSessionConfig()

guard let sessionConfig = sessionManager.fetchCurrentSessionConfig() else {
XCTFail("Could not create new session")
return
}

XCTAssertFalse(sessionConfig.isValid)

let newSessionConfig = sessionManager.fetchSessionConfig().0

XCTAssertTrue(newSessionConfig.isValid)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import Foundation
public class SessionManager {
private let store: SecureStore
private let SESSION_KEY = "session_id"
private let DEFAULT_SESSION_DURATION: TimeInterval = 24 * 7 * 3600

public var sessionDuration: TimeInterval

Expand All @@ -17,16 +18,19 @@ public class SessionManager {
self.sessionDuration = sessionDuration
}

private func fetchCurrentSessionConfig() -> SessionConfig? {
public func fetchCurrentSessionConfig() -> SessionConfig? {
let config: SessionConfig? = store.model(for: SESSION_KEY)
return config
}

private func updateSession() {
public func createNewSessionConfig() {
// update session expiry date
let config = SessionConfig(sessionId: UUID().uuidString,
var config = SessionConfig(sessionId: UUID().uuidString,
expiry: Date(timeIntervalSinceNow: sessionDuration))

if !config.isValid {
sessionDuration = DEFAULT_SESSION_DURATION
createNewSessionConfig()
}
// persist session config
if let configData = try? JSONEncoder().encode(config) {
store.save(data: configData, key: SESSION_KEY)
Expand All @@ -40,7 +44,7 @@ public class SessionManager {
} else {
// purge any existing session info
store.deleteData(for: SESSION_KEY)
updateSession()
createNewSessionConfig()
let config = fetchSessionConfig().0
return (config, false)
}
Expand Down

0 comments on commit 5ea02d5

Please sign in to comment.