Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions Sources/FormbricksSDK/Manager/SurveyManager.swift
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,7 @@ private extension SurveyManager {
}

/// Refreshes the environment state after the given timeout.
func refreshEnvironmentAfter(timeout: Double) {
internal func refreshEnvironmentAfter(timeout: Double) {
guard timeout > 0 else {
return
}
Expand All @@ -180,7 +180,7 @@ private extension SurveyManager {
}

/// Decides if the survey should be displayed based on the display percentage.
func shouldDisplayBasedOnPercentage(_ displayPercentage: Double?) -> Bool {
internal func shouldDisplayBasedOnPercentage(_ displayPercentage: Double?) -> Bool {
guard let displayPercentage = displayPercentage else { return true }
let randomNum = Double(Int.random(in: 0..<10000)) / 100.0
return randomNum <= displayPercentage
Expand Down Expand Up @@ -215,7 +215,7 @@ extension SurveyManager {
}

// MARK: - Helper methods -
private extension SurveyManager {
extension SurveyManager {
/// Filters the surveys based on the display type and limit.
func filterSurveysBasedOnDisplayType(_ surveys: [Survey], displays: [Display], responses: [String]) -> [Survey] {
return surveys.filter { survey in
Expand Down Expand Up @@ -263,7 +263,7 @@ private extension SurveyManager {
}
}

func getLanguageCode(
internal func getLanguageCode(
survey: Survey,
language: String?
) -> String? {
Expand Down
56 changes: 56 additions & 0 deletions Tests/FormbricksSDKTests/FormbricksSDKTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -204,4 +204,60 @@ final class FormbricksSDKTests: XCTestCase {
XCTAssertNil(Formbricks.environmentId, "Environment ID should be nil")
XCTAssertNil(Formbricks.logger, "Logger should be nil")
}

func testSurveyManagerEdgeCases() {
// Setup
let userManager = UserManager()
let presentSurveyManager = PresentSurveyManager()
let service = MockFormbricksService()
let manager = SurveyManager.create(userManager: userManager, presentSurveyManager: presentSurveyManager, service: service)

// shouldDisplayBasedOnPercentage
XCTAssertTrue(manager.shouldDisplayBasedOnPercentage(nil))
XCTAssertTrue(manager.shouldDisplayBasedOnPercentage(100))
XCTAssertFalse(manager.shouldDisplayBasedOnPercentage(0))

// UserDefaults: corrupt data
UserDefaults.standard.set(Data([0x00, 0x01]), forKey: "environmentResponseObjectKey")
XCTAssertNil(manager.environmentResponse)

// Timer-based refresh (simulate with short timeout)
manager.refreshEnvironmentAfter(timeout: 0.01)
let expectation = XCTestExpectation(description: "Timer fired")
DispatchQueue.main.asyncAfter(deadline: .now() + 0.02) {
expectation.fulfill()
}
wait(for: [expectation], timeout: 0.1)

// getLanguageCode coverage
let survey = Survey(
id: "1",
name: "Test Survey",
triggers: nil,
recontactDays: nil,
displayLimit: nil,
delay: nil,
displayPercentage: nil,
displayOption: .respondMultiple,
segment: nil,
styling: nil,
languages: [
SurveyLanguage(enabled: true, isDefault: true, language: LanguageDetail(id: "1", code: "en", alias: "english", projectId: "p1")),
SurveyLanguage(enabled: true, isDefault: false, language: LanguageDetail(id: "2", code: "de", alias: "german", projectId: "p1")),
SurveyLanguage(enabled: false, isDefault: false, language: LanguageDetail(id: "3", code: "fr", alias: nil, projectId: "p1"))
]
)
// No language provided
XCTAssertEqual(manager.getLanguageCode(survey: survey, language: nil), "default")
// Explicit default
XCTAssertEqual(manager.getLanguageCode(survey: survey, language: "default"), "default")
// Code match, enabled
XCTAssertEqual(manager.getLanguageCode(survey: survey, language: "de"), "de")
// Alias match, enabled
XCTAssertEqual(manager.getLanguageCode(survey: survey, language: "english"), "default") // isDefault
// Code match, disabled
XCTAssertNil(manager.getLanguageCode(survey: survey, language: "fr"))
// Alias not found
XCTAssertNil(manager.getLanguageCode(survey: survey, language: "spanish"))
}
}