test: Edit test
Some checks failed
gitea-openium/resgen.swift/pipeline/head There was a failure building this commit

This commit is contained in:
Loris Perret 2023-12-08 14:22:17 +01:00
parent ca763cd5d0
commit 1ee4998ec6
7 changed files with 364 additions and 152 deletions

View File

@ -167,24 +167,30 @@ class AnalyticsManager {
} }
} }
// MARK: - Introduction // MARK: - section_one
func logScreenIntroductionScreen(title: String) { func logScreenS1DefOne() {
logScreen( logScreen(
name: "Bienvenue \(title)", name: "s1 def one",
path: "introduction/" path: "s1_def_one/"
) )
} }
func logEventIntroductionScreen(test: String, data: Int) { func logEventS1DefTwo() {
logEvent( logEvent(
name: "Bienvenue", name: "s1 def two",
action: "action", action: "test",
category: "category", category: "test",
params: [ params: []
"test": test, )
"data": data }
]
// MARK: - section_two
func logScreenS2DefOne() {
logScreen(
name: "s2 def one",
path: "s2_def_one/"
) )
} }
} }

View File

@ -1,24 +1,43 @@
--- ---
categories: categories:
- id: Introduction - id: section_one
screens: screens:
- id: introduction_screen - id: s1_def_one
name: Bienvenue _TITLE_ name: s1 def one
path: introduction/ path: s1_def_one/
tags: droid,ios tags: ios
parameters:
- name: title
type: String
replaceIn: name
events: events:
- id: introduction_screen - id: s1_def_two
name: Bienvenue name: s1 def two
category: category action: test
action: action category: test
tags: droid,ios tags: ios
parameters:
- name: test - id: section_two
type: String screens:
- name: data - id: s2_def_one
type: Int name: s2 def one
path: s2_def_one/
tags: ios
events:
- id: s2_def_two
name: s2 def two
action: test
category: test
tags: droid
- id: section_three
screens:
- id: s3_def_one
name: s3 def one
path: s3_def_one/
tags: droid
events:
- id: s3_def_two
name: s3 def two
action: test
category: test
tags: droid

View File

@ -32,7 +32,7 @@ FORCE_FLAG="$1"
#echo "\n-------------------------\n" #echo "\n-------------------------\n"
# Strings ## Strings
#swift run -c release ResgenSwift strings stringium $FORCE_FLAG "./Strings/sampleStrings.txt" \ #swift run -c release ResgenSwift strings stringium $FORCE_FLAG "./Strings/sampleStrings.txt" \
# --output-path "./Strings/Generated" \ # --output-path "./Strings/Generated" \
# --langs "fr en en-us" \ # --langs "fr en en-us" \
@ -41,23 +41,23 @@ FORCE_FLAG="$1"
# --extension-name "String" \ # --extension-name "String" \
# --extension-suffix "GenAllScript" # --extension-suffix "GenAllScript"
echo "\n-------------------------\n"
## Tags
swift run -c release ResgenSwift strings tags $FORCE_FLAG "./Tags/sampleTags.txt" \
--lang "ium" \
--extension-output-path "./Tags/Generated" \
--extension-name "Tags" \
--extension-suffix "GenAllScript"
#
#echo "\n-------------------------\n" #echo "\n-------------------------\n"
## Analytics ## Tags
#swift run -c release ResgenSwift analytics $FORCE_FLAG "./Tags/sampleTags.yml" \ #swift run -c release ResgenSwift strings tags $FORCE_FLAG "./Tags/sampleTags.txt" \
# --target "matomo firebase" \ # --lang "ium" \
# --extension-output-path "./Tags/Generated" \ # --extension-output-path "./Tags/Generated" \
# --extension-name "Analytics" \ # --extension-name "Tags" \
# --extension-suffix "GenAllScript" # --extension-suffix "GenAllScript"
#
echo "\n-------------------------\n"
# Analytics
swift run -c release ResgenSwift analytics $FORCE_FLAG "./Tags/sampleTags.yml" \
--target "matomo firebase" \
--extension-output-path "./Tags/Generated" \
--extension-name "Analytics" \
--extension-suffix "GenAllScript"
echo "\n-------------------------\n" echo "\n-------------------------\n"
# #

View File

@ -22,8 +22,6 @@ class AnalyticsGenerator {
} }
} }
// Get extension content // Get extension content
let extensionFileContent = Self.getExtensionContent(sections: sections, let extensionFileContent = Self.getExtensionContent(sections: sections,
tags: tags, tags: tags,

View File

@ -91,8 +91,7 @@ class AnalyticsFileParser {
parameters: screen.parameters parameters: screen.parameters
) )
guard target.contains(Analytics.TargetType.matomo.value) else { continue } if target.contains(Analytics.TargetType.matomo.value) {
// Path // Path
guard let path = screen.path else { guard let path = screen.path else {
@ -101,6 +100,7 @@ class AnalyticsFileParser {
} }
definition.path = path definition.path = path
}
definitions.append(definition) definitions.append(definition)
} }
@ -121,8 +121,7 @@ class AnalyticsFileParser {
parameters: event.parameters parameters: event.parameters
) )
guard target.contains(Analytics.TargetType.matomo.value) else { continue } if target.contains(Analytics.TargetType.matomo.value) {
// Category // Category
guard let category = event.category else { guard let category = event.category else {
@ -140,6 +139,7 @@ class AnalyticsFileParser {
} }
definition.action = action definition.action = action
}
definitions.append(definition) definitions.append(definition)
} }

View File

@ -52,15 +52,18 @@ final class AnalyticsDefinitionTests: XCTestCase {
func testGeneratedRawPropertyScreen() { func testGeneratedRawPropertyScreen() {
// Given // Given
let definition = AnalyticsDefinition(id: "definition_name", name: "Ecran un", type: .screen) let definition = AnalyticsDefinition(id: "definition_name", name: "Ecran un", type: .screen)
definition.path = "ecran_un/"
// When // When
let propertyScreen = definition.getProperty() let propertyScreen = definition.getProperty()
// Expect // Expect
let expectScreen = """ let expectScreen = """
func logScreenEcranUn() { func logScreenDefinitionName() {
logScreen(name: "Ecran un", path: "ecran_un/") logScreen(
name: "Ecran un",
path: "ecran_un/"
)
} }
""" """
@ -69,15 +72,20 @@ final class AnalyticsDefinitionTests: XCTestCase {
func testGeneratedRawPropertyEvent() { func testGeneratedRawPropertyEvent() {
// Given // Given
let definition = AnalyticsDefinition(id: "definition_name", name: "Ecran un", type: .screen) let definition = AnalyticsDefinition(id: "definition_name", name: "Ecran un", type: .event)
// When // When
let propertyEvent = definition.getProperty() let propertyEvent = definition.getProperty()
// Expect // Expect
let expectEvent = """ let expectEvent = """
func logEventEcranUn() { func logEventDefinitionName() {
logEvent(name: "Ecran un") logEvent(
name: "Ecran un",
action: "",
category: "",
params: []
)
} }
""" """
@ -87,14 +95,18 @@ final class AnalyticsDefinitionTests: XCTestCase {
func testGeneratedRawStaticPropertyScreen() { func testGeneratedRawStaticPropertyScreen() {
// Given // Given
let definition = AnalyticsDefinition(id: "definition_name", name: "Ecran un", type: .screen) let definition = AnalyticsDefinition(id: "definition_name", name: "Ecran un", type: .screen)
definition.path = "ecran_un/"
// When // When
let propertyScreen = definition.getStaticProperty() let propertyScreen = definition.getStaticProperty()
// Expect // Expect
let expectScreen = """ let expectScreen = """
static func logScreenEcranUn() { static func logScreenDefinitionName() {
logScreen(name: "Ecran un", path: "ecran_un/") logScreen(
name: "Ecran un",
path: "ecran_un/"
)
} }
""" """
@ -103,15 +115,20 @@ final class AnalyticsDefinitionTests: XCTestCase {
func testGeneratedRawStaticPropertyEvent() { func testGeneratedRawStaticPropertyEvent() {
// Given // Given
let definition = AnalyticsDefinition(id: "definition_name", name: "Ecran un", type: .screen) let definition = AnalyticsDefinition(id: "definition_name", name: "Ecran un", type: .event)
// When // When
let propertyEvent = definition.getStaticProperty() let propertyEvent = definition.getStaticProperty()
// Expect // Expect
let expectEvent = """ let expectEvent = """
static func logEventEcranUn() { static func logEventDefinitionName() {
logEvent(name: "Ecran un") logEvent(
name: "Ecran un",
action: "",
category: "",
params: []
)
} }
""" """

View File

@ -13,9 +13,20 @@ import ToolCore
final class AnalyticsGeneratorTests: XCTestCase { final class AnalyticsGeneratorTests: XCTestCase {
private func getAnalyticsDefinition(id: String, path: String, name: String, type: AnalyticsDefinition.TagType, tags: [String]) -> AnalyticsDefinition { private func getAnalyticsDefinition(
id: String,
path: String = "",
action: String = "",
category: String = "",
name: String,
type: AnalyticsDefinition.TagType,
tags: [String]
) -> AnalyticsDefinition {
let definition = AnalyticsDefinition(id: id, name: name, type: type) let definition = AnalyticsDefinition(id: id, name: name, type: type)
definition.tags = tags definition.tags = tags
definition.path = path
definition.action = action
definition.category = category
return definition return definition
} }
@ -23,20 +34,20 @@ final class AnalyticsGeneratorTests: XCTestCase {
// Given // Given
let sectionOne = AnalyticsCategory(id: "section_one") let sectionOne = AnalyticsCategory(id: "section_one")
sectionOne.definitions = [ sectionOne.definitions = [
getAnalyticsDefinition(id: "s1_def_one", path: "s1_def_one/", name: "s1 def one", type: AnalyticsDefinition.TagType.screen, tags: ["ios", "iosonly"]), getAnalyticsDefinition(id: "s1_def_one", name: "s1 def one", type: .screen, tags: ["ios", "iosonly"]),
getAnalyticsDefinition(id: "s1_def_two", path: "s1_def_two/", name: "s1 def two", type: AnalyticsDefinition.TagType.event, tags: ["ios", "iosonly"]), getAnalyticsDefinition(id: "s1_def_two", name: "s1 def two", type: .event, tags: ["ios", "iosonly"]),
] ]
let sectionTwo = AnalyticsCategory(id: "section_two") let sectionTwo = AnalyticsCategory(id: "section_two")
sectionTwo.definitions = [ sectionTwo.definitions = [
getAnalyticsDefinition(id: "s2_def_one", path: "s2_def_one/", name: "s2 def one", type: AnalyticsDefinition.TagType.screen, tags: ["ios","iosonly"]), getAnalyticsDefinition(id: "s2_def_one", name: "s2 def one", type: .screen, tags: ["ios","iosonly"]),
getAnalyticsDefinition(id: "s2_def_two", path: "s2_def_two/", name: "s2 def two", type: AnalyticsDefinition.TagType.event, tags: ["droid","droidonly"]), getAnalyticsDefinition(id: "s2_def_two", name: "s2 def two", type: .event, tags: ["droid","droidonly"]),
] ]
let sectionThree = AnalyticsCategory(id: "section_three") let sectionThree = AnalyticsCategory(id: "section_three")
sectionThree.definitions = [ sectionThree.definitions = [
getAnalyticsDefinition(id: "s3_def_one", path: "s3_def_one/", name: "s3 def one", type: AnalyticsDefinition.TagType.screen, tags: ["droid","droidonly"]), getAnalyticsDefinition(id: "s3_def_one", name: "s3 def one", type: .screen, tags: ["droid","droidonly"]),
getAnalyticsDefinition(id: "s3_def_two", path: "s3_def_two/", name: "s3 def two", type: AnalyticsDefinition.TagType.event, tags: ["droid","droidonly"]), getAnalyticsDefinition(id: "s3_def_two", name: "s3 def two", type: .event, tags: ["droid","droidonly"]),
] ]
// When // When
@ -49,29 +60,55 @@ final class AnalyticsGeneratorTests: XCTestCase {
let expect = """ let expect = """
// Generated by ResgenSwift.Analytics 1.2 // Generated by ResgenSwift.Analytics 1.2
import UIKit
import Firebase import Firebase
// MARK: - Protocol // MARK: - Protocol
protocol AnalyticsManagerProtocol { protocol AnalyticsManagerProtocol {
func logScreen(name: String, path: String) func logScreen(name: String, path: String)
func logEvent(name: String) func logEvent(
name: String,
action: String,
category: String,
params: [String: Any]?
)
} }
// MARK: - Firebase // MARK: - Firebase
class FirebaseAnalyticsManager: AnalyticsManagerProtocol { class FirebaseAnalyticsManager: AnalyticsManagerProtocol {
func logScreen(name: String, path: String) { func logScreen(name: String, path: String) {
Analytics.logEvent(AnalyticsEventScreenView, parameters: [AnalyticsParameterScreenName: name])
}
func logEvent(name: String) {
var parameters = [ var parameters = [
AnalyticsParameterValue: name AnalyticsParameterScreenName: name
] ]
Analytics.logEvent(AnalyticsEventSelectContent, parameters: parameters) Analytics.logEvent(
AnalyticsEventScreenView,
parameters: parameters
)
}
func logEvent(
name: String,
action: String,
category: String,
params: [String: Any]?
) {
var parameters: [String:Any] = [
"action": action,
"category": category,
]
if let supplementaryParameters = params {
parameters.merge(supplementaryParameters) { (origin, new) -> Any in
return origin
}
}
Analytics.logEvent(
name,
parameters: parameters
)
} }
} }
@ -88,7 +125,9 @@ final class AnalyticsGeneratorTests: XCTestCase {
// MARK: - Methods // MARK: - Methods
func setAnalyticsEnabled(_ enable: Bool) { isEnabled = enable } func setAnalyticsEnabled(_ enable: Bool) {
isEnabled = enable
}
func configure() { func configure() {
managers.append(FirebaseAnalyticsManager()) managers.append(FirebaseAnalyticsManager())
@ -96,32 +135,55 @@ final class AnalyticsGeneratorTests: XCTestCase {
private func logScreen(name: String, path: String) { private func logScreen(name: String, path: String) {
guard isEnabled else { return } guard isEnabled else { return }
managers.forEach { manager in managers.forEach { manager in
manager.logScreen(name: name, path: path) manager.logScreen(name: name, path: path)
} }
} }
private func logEvent(name: String) { private func logEvent(
name: String,
action: String,
category: String,
params: [String: Any]?
) {
guard isEnabled else { return } guard isEnabled else { return }
managers.forEach { manager in managers.forEach { manager in
manager.logEvent(name: name) manager.logEvent(
name: name,
action: action,
category: category,
params: params
)
} }
} }
// MARK: - section_one // MARK: - section_one
func logScreenS1DefOne() { func logScreenS1DefOne() {
logScreen(name: "s1 def one", path: "s1_def_one/") logScreen(
name: "s1 def one",
path: ""
)
} }
func logEventS1DefTwo() { func logEventS1DefTwo() {
logEvent(name: "s1 def two") logEvent(
name: "s1 def two",
action: "",
category: "",
params: []
)
} }
// MARK: - section_two // MARK: - section_two
func logScreenS2DefOne() { func logScreenS2DefOne() {
logScreen(name: "s2 def one", path: "s2_def_one/") logScreen(
name: "s2 def one",
path: ""
)
} }
} }
@ -137,20 +199,20 @@ final class AnalyticsGeneratorTests: XCTestCase {
// Given // Given
let sectionOne = AnalyticsCategory(id: "section_one") let sectionOne = AnalyticsCategory(id: "section_one")
sectionOne.definitions = [ sectionOne.definitions = [
getAnalyticsDefinition(id: "s1_def_one", path: "s1_def_one/", name: "s1 def one", type: AnalyticsDefinition.TagType.screen, tags: ["ios", "iosonly"]), getAnalyticsDefinition(id: "s1_def_one", path: "s1_def_one/", name: "s1 def one", type: .screen, tags: ["ios", "iosonly"]),
getAnalyticsDefinition(id: "s1_def_two", path: "s1_def_two/", name: "s1 def two", type: AnalyticsDefinition.TagType.event, tags: ["ios", "iosonly"]), getAnalyticsDefinition(id: "s1_def_two", action: "test", category: "test", name: "s1 def two", type: .event, tags: ["ios", "iosonly"]),
] ]
let sectionTwo = AnalyticsCategory(id: "section_two") let sectionTwo = AnalyticsCategory(id: "section_two")
sectionTwo.definitions = [ sectionTwo.definitions = [
getAnalyticsDefinition(id: "s2_def_one", path: "s2_def_one/", name: "s2 def one", type: AnalyticsDefinition.TagType.screen, tags: ["ios","iosonly"]), getAnalyticsDefinition(id: "s2_def_one", path: "s2_def_one/", name: "s2 def one", type: .screen, tags: ["ios","iosonly"]),
getAnalyticsDefinition(id: "s2_def_two", path: "s2_def_two/", name: "s2 def two", type: AnalyticsDefinition.TagType.event, tags: ["droid","droidonly"]), getAnalyticsDefinition(id: "s2_def_two", action: "test", category: "test", name: "s2 def two", type: .event, tags: ["droid","droidonly"]),
] ]
let sectionThree = AnalyticsCategory(id: "section_three") let sectionThree = AnalyticsCategory(id: "section_three")
sectionThree.definitions = [ sectionThree.definitions = [
getAnalyticsDefinition(id: "s3_def_one", path: "s3_def_one/", name: "s3 def one", type: AnalyticsDefinition.TagType.screen, tags: ["droid","droidonly"]), getAnalyticsDefinition(id: "s3_def_one", path: "s3_def_one/", name: "s3 def one", type: .screen, tags: ["droid","droidonly"]),
getAnalyticsDefinition(id: "s3_def_two", path: "s3_def_two/", name: "s3 def two", type: AnalyticsDefinition.TagType.event, tags: ["droid","droidonly"]), getAnalyticsDefinition(id: "s3_def_two", action: "test", category: "test", name: "s3 def two", type: .event, tags: ["droid","droidonly"]),
] ]
// When // When
@ -163,14 +225,18 @@ final class AnalyticsGeneratorTests: XCTestCase {
let expect = """ let expect = """
// Generated by ResgenSwift.Analytics 1.2 // Generated by ResgenSwift.Analytics 1.2
import UIKit
import MatomoTracker import MatomoTracker
// MARK: - Protocol // MARK: - Protocol
protocol AnalyticsManagerProtocol { protocol AnalyticsManagerProtocol {
func logScreen(name: String, path: String) func logScreen(name: String, path: String)
func logEvent(name: String) func logEvent(
name: String,
action: String,
category: String,
params: [String: Any]?
)
} }
// MARK: - Matomo // MARK: - Matomo
@ -186,7 +252,10 @@ final class AnalyticsGeneratorTests: XCTestCase {
init(siteId: String, url: String) { init(siteId: String, url: String) {
debugPrint("[Matomo service] Server URL: \\(url)") debugPrint("[Matomo service] Server URL: \\(url)")
debugPrint("[Matomo service] Site ID: \\(siteId)") debugPrint("[Matomo service] Site ID: \\(siteId)")
tracker = MatomoTracker(siteId: siteId, baseURL: URL(string: url)!) tracker = MatomoTracker(
siteId: siteId,
baseURL: URL(string: url)!
)
#if DEBUG #if DEBUG
tracker.dispatchInterval = 5 tracker.dispatchInterval = 5
@ -205,6 +274,7 @@ final class AnalyticsGeneratorTests: XCTestCase {
func logScreen(name: String, path: String) { func logScreen(name: String, path: String) {
guard !tracker.isOptedOut else { return } guard !tracker.isOptedOut else { return }
guard let trackerUrl = tracker.contentBase?.absoluteString else { return } guard let trackerUrl = tracker.contentBase?.absoluteString else { return }
let urlString = URL(string: "\\(trackerUrl)" + "/" + "\\(path)" + "iOS") let urlString = URL(string: "\\(trackerUrl)" + "/" + "\\(path)" + "iOS")
tracker.track( tracker.track(
view: [name], view: [name],
@ -212,11 +282,17 @@ final class AnalyticsGeneratorTests: XCTestCase {
) )
} }
func logEvent(name: String) { func logEvent(
name: String,
action: String,
category: String,
params: [String: Any]?
) {
guard !tracker.isOptedOut else { return } guard !tracker.isOptedOut else { return }
tracker.track( tracker.track(
eventWithCategory: "category", eventWithCategory: category,
action: "action", action: action,
name: name, name: name,
number: nil, number: nil,
url: nil url: nil
@ -237,40 +313,70 @@ final class AnalyticsGeneratorTests: XCTestCase {
// MARK: - Methods // MARK: - Methods
func setAnalyticsEnabled(_ enable: Bool) { isEnabled = enable } func setAnalyticsEnabled(_ enable: Bool) {
isEnabled = enable
}
func configure(siteId: String, url: String) { func configure(siteId: String, url: String) {
managers.append(MatomoAnalyticsManager(siteId: siteId, url: url)) managers.append(
MatomoAnalyticsManager(
siteId: siteId,
url: url
)
)
} }
private func logScreen(name: String, path: String) { private func logScreen(name: String, path: String) {
guard isEnabled else { return } guard isEnabled else { return }
managers.forEach { manager in managers.forEach { manager in
manager.logScreen(name: name, path: path) manager.logScreen(name: name, path: path)
} }
} }
private func logEvent(name: String) { private func logEvent(
name: String,
action: String,
category: String,
params: [String: Any]?
) {
guard isEnabled else { return } guard isEnabled else { return }
managers.forEach { manager in managers.forEach { manager in
manager.logEvent(name: name) manager.logEvent(
name: name,
action: action,
category: category,
params: params
)
} }
} }
// MARK: - section_one // MARK: - section_one
func logScreenS1DefOne() { func logScreenS1DefOne() {
logScreen(name: "s1 def one", path: "s1_def_one/") logScreen(
name: "s1 def one",
path: "s1_def_one/"
)
} }
func logEventS1DefTwo() { func logEventS1DefTwo() {
logEvent(name: "s1 def two") logEvent(
name: "s1 def two",
action: "test",
category: "test",
params: []
)
} }
// MARK: - section_two // MARK: - section_two
func logScreenS2DefOne() { func logScreenS2DefOne() {
logScreen(name: "s2 def one", path: "s2_def_one/") logScreen(
name: "s2 def one",
path: "s2_def_one/"
)
} }
} }
@ -286,20 +392,20 @@ final class AnalyticsGeneratorTests: XCTestCase {
// Given // Given
let sectionOne = AnalyticsCategory(id: "section_one") let sectionOne = AnalyticsCategory(id: "section_one")
sectionOne.definitions = [ sectionOne.definitions = [
getAnalyticsDefinition(id: "s1_def_one", path: "s1_def_one/", name: "s1 def one", type: AnalyticsDefinition.TagType.screen, tags: ["ios", "iosonly"]), getAnalyticsDefinition(id: "s1_def_one", path: "s1_def_one/", name: "s1 def one", type: .screen, tags: ["ios", "iosonly"]),
getAnalyticsDefinition(id: "s1_def_two", path: "s1_def_two/", name: "s1 def two", type: AnalyticsDefinition.TagType.event, tags: ["ios", "iosonly"]), getAnalyticsDefinition(id: "s1_def_two", action: "test", category: "test", name: "s1 def two", type: .event, tags: ["ios", "iosonly"]),
] ]
let sectionTwo = AnalyticsCategory(id: "section_two") let sectionTwo = AnalyticsCategory(id: "section_two")
sectionTwo.definitions = [ sectionTwo.definitions = [
getAnalyticsDefinition(id: "s2_def_one", path: "s2_def_one/", name: "s2 def one", type: AnalyticsDefinition.TagType.screen, tags: ["ios","iosonly"]), getAnalyticsDefinition(id: "s2_def_one", path: "s2_def_one/", name: "s2 def one", type: .screen, tags: ["ios","iosonly"]),
getAnalyticsDefinition(id: "s2_def_two", path: "s2_def_two/", name: "s2 def two", type: AnalyticsDefinition.TagType.event, tags: ["droid","droidonly"]), getAnalyticsDefinition(id: "s2_def_two", action: "test", category: "test", name: "s2 def two", type: .event, tags: ["droid","droidonly"]),
] ]
let sectionThree = AnalyticsCategory(id: "section_three") let sectionThree = AnalyticsCategory(id: "section_three")
sectionThree.definitions = [ sectionThree.definitions = [
getAnalyticsDefinition(id: "s3_def_one", path: "s3_def_one/", name: "s3 def one", type: AnalyticsDefinition.TagType.screen, tags: ["droid","droidonly"]), getAnalyticsDefinition(id: "s3_def_one", path: "s3_def_one/", name: "s3 def one", type: .screen, tags: ["droid","droidonly"]),
getAnalyticsDefinition(id: "s3_def_two", path: "s3_def_two/", name: "s3 def two", type: AnalyticsDefinition.TagType.event, tags: ["droid","droidonly"]), getAnalyticsDefinition(id: "s3_def_two", action: "test", category: "test", name: "s3 def two", type: .event, tags: ["droid","droidonly"]),
] ]
// When // When
@ -312,7 +418,6 @@ final class AnalyticsGeneratorTests: XCTestCase {
let expect = """ let expect = """
// Generated by ResgenSwift.Analytics 1.2 // Generated by ResgenSwift.Analytics 1.2
import UIKit
import MatomoTracker import MatomoTracker
import Firebase import Firebase
@ -320,7 +425,12 @@ final class AnalyticsGeneratorTests: XCTestCase {
protocol AnalyticsManagerProtocol { protocol AnalyticsManagerProtocol {
func logScreen(name: String, path: String) func logScreen(name: String, path: String)
func logEvent(name: String) func logEvent(
name: String,
action: String,
category: String,
params: [String: Any]?
)
} }
// MARK: - Matomo // MARK: - Matomo
@ -336,7 +446,10 @@ final class AnalyticsGeneratorTests: XCTestCase {
init(siteId: String, url: String) { init(siteId: String, url: String) {
debugPrint("[Matomo service] Server URL: \\(url)") debugPrint("[Matomo service] Server URL: \\(url)")
debugPrint("[Matomo service] Site ID: \\(siteId)") debugPrint("[Matomo service] Site ID: \\(siteId)")
tracker = MatomoTracker(siteId: siteId, baseURL: URL(string: url)!) tracker = MatomoTracker(
siteId: siteId,
baseURL: URL(string: url)!
)
#if DEBUG #if DEBUG
tracker.dispatchInterval = 5 tracker.dispatchInterval = 5
@ -355,6 +468,7 @@ final class AnalyticsGeneratorTests: XCTestCase {
func logScreen(name: String, path: String) { func logScreen(name: String, path: String) {
guard !tracker.isOptedOut else { return } guard !tracker.isOptedOut else { return }
guard let trackerUrl = tracker.contentBase?.absoluteString else { return } guard let trackerUrl = tracker.contentBase?.absoluteString else { return }
let urlString = URL(string: "\\(trackerUrl)" + "/" + "\\(path)" + "iOS") let urlString = URL(string: "\\(trackerUrl)" + "/" + "\\(path)" + "iOS")
tracker.track( tracker.track(
view: [name], view: [name],
@ -362,11 +476,17 @@ final class AnalyticsGeneratorTests: XCTestCase {
) )
} }
func logEvent(name: String) { func logEvent(
name: String,
action: String,
category: String,
params: [String: Any]?
) {
guard !tracker.isOptedOut else { return } guard !tracker.isOptedOut else { return }
tracker.track( tracker.track(
eventWithCategory: "category", eventWithCategory: category,
action: "action", action: action,
name: name, name: name,
number: nil, number: nil,
url: nil url: nil
@ -378,15 +498,37 @@ final class AnalyticsGeneratorTests: XCTestCase {
class FirebaseAnalyticsManager: AnalyticsManagerProtocol { class FirebaseAnalyticsManager: AnalyticsManagerProtocol {
func logScreen(name: String, path: String) { func logScreen(name: String, path: String) {
Analytics.logEvent(AnalyticsEventScreenView, parameters: [AnalyticsParameterScreenName: name])
}
func logEvent(name: String) {
var parameters = [ var parameters = [
AnalyticsParameterValue: name AnalyticsParameterScreenName: name
] ]
Analytics.logEvent(AnalyticsEventSelectContent, parameters: parameters) Analytics.logEvent(
AnalyticsEventScreenView,
parameters: parameters
)
}
func logEvent(
name: String,
action: String,
category: String,
params: [String: Any]?
) {
var parameters: [String:Any] = [
"action": action,
"category": category,
]
if let supplementaryParameters = params {
parameters.merge(supplementaryParameters) { (origin, new) -> Any in
return origin
}
}
Analytics.logEvent(
name,
parameters: parameters
)
} }
} }
@ -403,41 +545,71 @@ final class AnalyticsGeneratorTests: XCTestCase {
// MARK: - Methods // MARK: - Methods
func setAnalyticsEnabled(_ enable: Bool) { isEnabled = enable } func setAnalyticsEnabled(_ enable: Bool) {
isEnabled = enable
}
func configure(siteId: String, url: String) { func configure(siteId: String, url: String) {
managers.append(MatomoAnalyticsManager(siteId: siteId, url: url)) managers.append(
MatomoAnalyticsManager(
siteId: siteId,
url: url
)
)
managers.append(FirebaseAnalyticsManager()) managers.append(FirebaseAnalyticsManager())
} }
private func logScreen(name: String, path: String) { private func logScreen(name: String, path: String) {
guard isEnabled else { return } guard isEnabled else { return }
managers.forEach { manager in managers.forEach { manager in
manager.logScreen(name: name, path: path) manager.logScreen(name: name, path: path)
} }
} }
private func logEvent(name: String) { private func logEvent(
name: String,
action: String,
category: String,
params: [String: Any]?
) {
guard isEnabled else { return } guard isEnabled else { return }
managers.forEach { manager in managers.forEach { manager in
manager.logEvent(name: name) manager.logEvent(
name: name,
action: action,
category: category,
params: params
)
} }
} }
// MARK: - section_one // MARK: - section_one
func logScreenS1DefOne() { func logScreenS1DefOne() {
logScreen(name: "s1 def one", path: "s1_def_one/") logScreen(
name: "s1 def one",
path: "s1_def_one/"
)
} }
func logEventS1DefTwo() { func logEventS1DefTwo() {
logEvent(name: "s1 def two") logEvent(
name: "s1 def two",
action: "test",
category: "test",
params: []
)
} }
// MARK: - section_two // MARK: - section_two
func logScreenS2DefOne() { func logScreenS2DefOne() {
logScreen(name: "s2 def one", path: "s2_def_one/") logScreen(
name: "s2 def one",
path: "s2_def_one/"
)
} }
} }