Skip to content

Commit 6434e30

Browse files
authored
refactor: route changes (#13)
1 parent bc58ce2 commit 6434e30

10 files changed

Lines changed: 141 additions & 34 deletions

File tree

library/src/main/java/com/paypal/messages/ModalFragment.kt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -384,9 +384,9 @@ internal class ModalFragment constructor(
384384
val shared = jsonElementToMutableMap(sharedJson)
385385
when (name) {
386386
"onClick" -> {
387-
val linkName = args.get("link_name")?.asString
388-
val linkSrc = args.get("link_src")?.asString
389-
if (linkName == "Apply Now") {
387+
val pageViewLinkName = args.get("page_view_link_name")?.asString
388+
val pageViewLinkSource = args.get("page_view_link_source")?.asString
389+
if (pageViewLinkName == "Apply Now") {
390390
this.onApply()
391391
}
392392
else {
@@ -395,8 +395,8 @@ internal class ModalFragment constructor(
395395
logEvent(
396396
TrackingEvent(
397397
eventType = EventType.MODAL_CLICK,
398-
linkSrc = linkSrc,
399-
linkName = linkName,
398+
pageViewLinkSource = pageViewLinkSource,
399+
pageViewLinkName = pageViewLinkName,
400400
),
401401
shared,
402402
)
@@ -468,7 +468,7 @@ internal class ModalFragment constructor(
468468
buyerCountryCode = this.buyerCountry,
469469
type = ComponentType.MODAL.toString(),
470470
instanceId = this.instanceId.toString(),
471-
events = mutableListOf(event),
471+
componentEvents = mutableListOf(event),
472472
__shared__ = dynamicKeys,
473473
)
474474

library/src/main/java/com/paypal/messages/PayPalMessageView.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -424,8 +424,8 @@ class PayPalMessageView @JvmOverloads constructor(
424424
logEvent(
425425
TrackingEvent(
426426
eventType = EventType.MESSAGE_CLICK,
427-
linkName = "banner_wrapper",
428-
linkSrc = "message",
427+
pageViewLinkName = "banner_wrapper",
428+
pageViewLinkSource = "message",
429429
),
430430
)
431431
showWebView(response)
@@ -555,7 +555,7 @@ class PayPalMessageView @JvmOverloads constructor(
555555
instanceId = Api.instanceId.toString(),
556556
originatingInstanceId = Api.originatingInstanceId.toString(),
557557
sessionId = Api.sessionId.toString(),
558-
events = mutableListOf(event),
558+
componentEvents = mutableListOf(event),
559559
)
560560

561561
Logger.getInstance(clientId = clientId).log(context, component)

library/src/main/java/com/paypal/messages/io/Api.kt

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.paypal.messages.io
33
import android.content.Context
44
import com.google.gson.Gson
55
import com.paypal.messages.BuildConfig
6+
import com.paypal.messages.logger.CloudEvent
67
import com.paypal.messages.logger.TrackingPayload
78
import com.paypal.messages.utils.LogCat
89
import com.paypal.messages.utils.PayPalErrors
@@ -46,12 +47,19 @@ object Api {
4647

4748
private val rootUrl = ROOT_URLS[environment]
4849
private val presentmentUrl = if (environment === Env.LOCAL) "$rootUrl:8000" else "$rootUrl"
49-
private val loggerUrl = if (environment === Env.LOCAL) "$rootUrl:9090" else "$rootUrl"
50+
private val loggerBase: String = when (environment) {
51+
Env.LIVE -> "https://api.paypal.com"
52+
Env.SANDBOX -> "https://api.sandbox.paypal.com"
53+
Env.STAGE -> "$rootUrl"
54+
Env.STAGE_VPN -> "$rootUrl"
55+
Env.LOCAL -> "$rootUrl:9090"
56+
}
57+
val loggerEnd = "v1/credit/upstream-messaging-events"
5058

5159
val messageData = "$presentmentUrl/credit-presentment/native/message".toHttpUrl()
5260
val messageHash = "$presentmentUrl/credit-presentment/merchant-profile".toHttpUrl()
5361
val modalData = "$presentmentUrl/credit-presentment/lander/modal".toHttpUrl()
54-
val logger = "$loggerUrl/track/native".toHttpUrl()
62+
val logger = "$loggerBase/$loggerEnd".toHttpUrl()
5563
}
5664

5765
private fun HttpUrl.Builder.setMessageDataQuery(config: MessageConfig, hash: String?) {
@@ -251,8 +259,7 @@ object Api {
251259
}
252260

253261
fun callLoggerEndpoint(payload: TrackingPayload) {
254-
// TODO, Ensure __shared__ property is correctly converted and added to json payload
255-
val json = gson.toJson(payload)
262+
val json = gson.toJson(CloudEvent(data = payload))
256263
val request = createLoggerRequest(json)
257264
val response = client.newCall(request).execute()
258265
response.body?.string()?.let { LogCat.debug(TAG, "callLoggerEndpoint response: $it") }
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com.paypal.messages.logger
2+
3+
import com.google.gson.annotations.SerializedName
4+
import java.text.SimpleDateFormat
5+
import java.util.Date
6+
import java.util.UUID
7+
8+
data class CloudEvent(
9+
@SerializedName("specversion")
10+
val specVersion: String = "1.0",
11+
val id: UUID = UUID.randomUUID(),
12+
val type: String = "com.paypal.credit.upstream-presentment.v1",
13+
val source: String = "urn:paypal:event-src:v1:android:messages",
14+
@SerializedName("datacontenttype")
15+
val dataContentType: String = "application/json",
16+
@Suppress("ktlint:standard:max-line-length")
17+
@SerializedName("dataschema")
18+
val dataSchema: String = "ppaas:events.credit.FinancingPresentmentAsyncAPISpecification/v1/schema/json/credit_upstream_presentment_event.json",
19+
var time: String = "",
20+
val data: TrackingPayload,
21+
) {
22+
init {
23+
val dateFormat = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ")
24+
val currentDate = Date()
25+
26+
val formattedDate = dateFormat.format(currentDate)
27+
time = formattedDate
28+
}
29+
}

library/src/main/java/com/paypal/messages/logger/Logger.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -93,8 +93,8 @@ class Logger private constructor() {
9393
val oldComponent = this.payload?.components?.find { it.instanceId == component.instanceId }
9494

9595
if (oldComponent != null) {
96-
val oldEvents = oldComponent.events
97-
component.events.addAll(0, oldEvents)
96+
val oldEvents = oldComponent.componentEvents
97+
component.componentEvents.addAll(0, oldEvents)
9898

9999
val index = this.payload?.components?.indexOfFirst { it.instanceId == component.instanceId }
100100

@@ -120,7 +120,7 @@ class Logger private constructor() {
120120
val localStorage = LocalStorage(context)
121121
val hash = localStorage.merchantHash
122122
val payloadSummary = finalPayload.components.joinToString("\n") {
123-
val eventsString = it.events.joinToString { event -> event.eventType.toString() }
123+
val eventsString = it.componentEvents.joinToString { event -> event.eventType.toString() }
124124
" type: ${it.type}\n instanceId: ${it.instanceId}\n events: $eventsString\n"
125125
}
126126
LogCat.debug(TAG, "merchantHash: ${hash}\npayloadSummary:\n$payloadSummary")

library/src/main/java/com/paypal/messages/logger/TrackingComponent.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,8 @@ data class TrackingComponent(
6060
val originatingInstanceId: String? = null,
6161
@SerializedName("session_id")
6262
val sessionId: String? = null,
63-
@SerializedName("events")
64-
val events: MutableList<TrackingEvent>,
63+
@SerializedName("component_events")
64+
val componentEvents: MutableList<TrackingEvent>,
6565

6666
// Dynamic Properties, not serialized by default
6767
val __shared__: MutableMap<String, Any>? = mutableMapOf(),

library/src/main/java/com/paypal/messages/logger/TrackingEvent.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@ data class TrackingEvent(
99
var renderDuration: Int? = null,
1010
@SerializedName("request_duration")
1111
var requestDuration: Int? = null,
12-
@SerializedName("link_name")
13-
var linkName: String? = null,
14-
@SerializedName("link_src")
15-
var linkSrc: String? = null,
12+
@SerializedName("page_view_link_name")
13+
var pageViewLinkName: String? = null,
14+
@SerializedName("page_view_link_source")
15+
var pageViewLinkSource: String? = null,
1616
@SerializedName("data")
1717
var data: String? = null,
1818
@SerializedName("error_name")
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
package com.paypal.messages.logger
2+
3+
import com.google.gson.Gson
4+
import org.junit.jupiter.api.Assertions.assertEquals
5+
import org.junit.jupiter.api.Test
6+
7+
class CloudEventTest {
8+
private val clientId = "test_client_id"
9+
private val merchantId = "test_merchant_id"
10+
private val partnerAttributionId = "test_partner_attribution_id"
11+
private val merchantProfileHash = "test_merchant_profile_hash"
12+
private val deviceId = "test_device_id"
13+
private val sessionId = "test_session_id"
14+
private val instanceId = "test_instance_id"
15+
private val integrationName = "test_integration_name"
16+
private val integrationType = "test_integration_type"
17+
private val integrationVersion = "test_integration_version"
18+
private val libraryVersion = "test_library_version"
19+
private val components = mutableListOf<TrackingComponent>()
20+
private val specVersion = "1.0"
21+
private val type = "com.paypal.credit.upstream-presentment.v1"
22+
private val source = "urn:paypal:event-src:v1:android:messages"
23+
private val dataContentType = "application/json"
24+
25+
@Suppress("ktlint:standard:max-line-length")
26+
private val dataSchema = "ppaas:events.credit.FinancingPresentmentAsyncAPISpecification/v1/schema/json/credit_upstream_presentment_event.json"
27+
28+
private val data = TrackingPayload(
29+
clientId = clientId,
30+
merchantId = merchantId,
31+
partnerAttributionId = partnerAttributionId,
32+
merchantProfileHash = merchantProfileHash,
33+
deviceId = deviceId,
34+
sessionId = sessionId,
35+
instanceId = instanceId,
36+
integrationName = integrationName,
37+
integrationType = integrationType,
38+
integrationVersion = integrationVersion,
39+
libraryVersion = libraryVersion,
40+
components = components,
41+
)
42+
43+
private val cloudWrappedEvent = CloudEvent(
44+
specVersion = specVersion,
45+
type = type,
46+
source = source,
47+
dataContentType = dataContentType,
48+
dataSchema = dataSchema,
49+
data = data,
50+
)
51+
52+
@Test
53+
fun testConstructor() {
54+
assertEquals(cloudWrappedEvent.specVersion, specVersion)
55+
assertEquals(cloudWrappedEvent.type, type)
56+
assertEquals(cloudWrappedEvent.source, source)
57+
assertEquals(cloudWrappedEvent.dataContentType, dataContentType)
58+
assertEquals(cloudWrappedEvent.dataSchema, dataSchema)
59+
assertEquals(cloudWrappedEvent.data, data)
60+
}
61+
62+
@Test
63+
fun testSerialization() {
64+
val gson = Gson()
65+
val json = gson.toJson(cloudWrappedEvent)
66+
67+
@Suppress("ktlint:standard:max-line-length")
68+
val expectedJson = """{"specversion":"1.0","id":"${cloudWrappedEvent.id}","type":"com.paypal.credit.upstream-presentment.v1","source":"urn:paypal:event-src:v1:android:messages","datacontenttype":"application/json","dataschema":"ppaas:events.credit.FinancingPresentmentAsyncAPISpecification/v1/schema/json/credit_upstream_presentment_event.json","time":"${cloudWrappedEvent.time}","data":{"client_id":"test_client_id","merchant_id":"test_merchant_id","partner_attribution_id":"test_partner_attribution_id","merchant_profile_hash":"test_merchant_profile_hash","device_id":"test_device_id","session_id":"test_session_id","instance_id":"test_instance_id","integration_name":"test_integration_name","integration_type":"test_integration_type","integration_version":"test_integration_version","lib_version":"test_library_version","components":[]}}"""
69+
assertEquals(expectedJson, json)
70+
}
71+
}

library/src/test/java/com/paypal/messages/logger/TrackingComponentTest.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ class TrackingComponentTest {
3232
private val instanceId = "test_instance_id"
3333
private val originatingInstanceId = "test_originating_instance_id"
3434
private val sessionId = "test_session_id"
35-
private val events = mutableListOf(TrackingEvent(EventType.MESSAGE_CLICK))
35+
private val componentEvents = mutableListOf(TrackingEvent(EventType.MESSAGE_CLICK))
3636

3737
private val trackingComponent = TrackingComponent(
3838
offerType = offerType,
@@ -58,9 +58,9 @@ class TrackingComponentTest {
5858
instanceId = instanceId,
5959
originatingInstanceId = originatingInstanceId,
6060
sessionId = sessionId,
61-
events = events,
61+
componentEvents = componentEvents,
6262
)
63-
63+
6464
@Test
6565
fun testConstructor() {
6666
assertEquals(offerType, trackingComponent.offerType)
@@ -86,7 +86,7 @@ class TrackingComponentTest {
8686
assertEquals(instanceId, trackingComponent.instanceId)
8787
assertEquals(originatingInstanceId, trackingComponent.originatingInstanceId)
8888
assertEquals(sessionId, trackingComponent.sessionId)
89-
assertEquals(events, trackingComponent.events)
89+
assertEquals(componentEvents, trackingComponent.componentEvents)
9090
}
9191

9292
@Test
@@ -95,7 +95,7 @@ class TrackingComponentTest {
9595
val json = gson.toJson(trackingComponent)
9696

9797
@Suppress("ktlint:standard:max-line-length")
98-
val expectedJson = """{"offer_type":"PAY_LATER_SHORT_TERM","amount":"100.00","placement":"CART","buyer_country_code":"US","channel":"NATIVE","style_logo_type":"ALTERNATIVE","style_color":"MONOCHROME","style_text_align":"CENTER","message_type":"OFFER","views":["VIEW"],"qualified_products":["PRODUCT"],"fdata":"test_fdata","debug_id":"test_debug_id","experimentation_experience_ids":["EXP_1","EXP_2"],"experimentation_treatment_ids":["TRT_1","TRT_2"],"credit_product_identifiers":["CPI_1","CPI_2"],"offer_country_code":"US","merchant_country_code":"US","type":"OFFER","instance_id":"test_instance_id","originating_instance_id":"test_originating_instance_id","session_id":"test_session_id","events":[{"event_type":"MESSAGE_CLICK"}],"__shared__":{}}"""
98+
val expectedJson = """{"offer_type":"PAY_LATER_SHORT_TERM","amount":"100.00","placement":"CART","buyer_country_code":"US","channel":"NATIVE","style_logo_type":"ALTERNATIVE","style_color":"MONOCHROME","style_text_align":"CENTER","message_type":"OFFER","views":["VIEW"],"qualified_products":["PRODUCT"],"fdata":"test_fdata","debug_id":"test_debug_id","experimentation_experience_ids":["EXP_1","EXP_2"],"experimentation_treatment_ids":["TRT_1","TRT_2"],"credit_product_identifiers":["CPI_1","CPI_2"],"offer_country_code":"US","merchant_country_code":"US","type":"OFFER","instance_id":"test_instance_id","originating_instance_id":"test_originating_instance_id","session_id":"test_session_id","component_events":[{"event_type":"MESSAGE_CLICK"}],"__shared__":{}}"""
9999
assertEquals(expectedJson, json)
100100
}
101101
}

library/src/test/java/com/paypal/messages/logger/TrackingEventTest.kt

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ class TrackingEventTest {
88
private val eventType = EventType.MESSAGE_CLICK
99
private val renderDuration = 100
1010
private val requestDuration = 200
11-
private val linkName = "test_link_name"
12-
private val linkSrc = "test_link_src"
11+
private val pageViewLinkName = "test_link_name"
12+
private val pageViewLinkSource = "test_link_src"
1313
private val data = "test_data"
1414
private val errorName = "test_error_name"
1515
private val errorDescription = "test_error_description"
@@ -18,8 +18,8 @@ class TrackingEventTest {
1818
eventType = eventType,
1919
renderDuration = renderDuration,
2020
requestDuration = requestDuration,
21-
linkName = linkName,
22-
linkSrc = linkSrc,
21+
pageViewLinkName = pageViewLinkName,
22+
pageViewLinkSource = pageViewLinkSource,
2323
data = data,
2424
errorName = errorName,
2525
errorDescription = errorDescription,
@@ -30,8 +30,8 @@ class TrackingEventTest {
3030
assertEquals(eventType, trackingEvent.eventType)
3131
assertEquals(renderDuration, trackingEvent.renderDuration)
3232
assertEquals(requestDuration, trackingEvent.requestDuration)
33-
assertEquals(linkName, trackingEvent.linkName)
34-
assertEquals(linkSrc, trackingEvent.linkSrc)
33+
assertEquals(pageViewLinkName, trackingEvent.pageViewLinkName)
34+
assertEquals(pageViewLinkSource, trackingEvent.pageViewLinkSource)
3535
assertEquals(data, trackingEvent.data)
3636
assertEquals(errorName, trackingEvent.errorName)
3737
assertEquals(errorDescription, trackingEvent.errorDescription)
@@ -43,7 +43,7 @@ class TrackingEventTest {
4343
val json = gson.toJson(trackingEvent)
4444

4545
@Suppress("ktlint:standard:max-line-length")
46-
val expectedJson = """{"event_type":"MESSAGE_CLICK","render_duration":100,"request_duration":200,"link_name":"test_link_name","link_src":"test_link_src","data":"test_data","error_name":"test_error_name","error_description":"test_error_description"}"""
46+
val expectedJson = """{"event_type":"MESSAGE_CLICK","render_duration":100,"request_duration":200,"page_view_link_name":"test_link_name","page_view_link_source":"test_link_src","data":"test_data","error_name":"test_error_name","error_description":"test_error_description"}"""
4747
assertEquals(expectedJson, json)
4848
}
4949
}

0 commit comments

Comments
 (0)