Skip to content

Commit bcb25cb

Browse files
committed
Merge branch 'develop'
2 parents bc466cf + c5fd0d6 commit bcb25cb

File tree

8 files changed

+468
-224
lines changed

8 files changed

+468
-224
lines changed

android/src/main/java/com/sap/gigya_rn_plugin/GigyaSdkWrapper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ public GigyaSdkWrapper(Application application, Class<T> accountSchema) {
5656

5757
try {
5858
IApiRequestFactory ref = Gigya.getContainer().get(IApiRequestFactory.class);
59-
ref.setSDK("react_native_" + "0.6.2" + "_android_" + Gigya.VERSION);
59+
ref.setSDK("react_native_" + "0.6.3" + "_android_" + Gigya.VERSION);
6060
} catch (Exception ex) {
6161
ex.printStackTrace();
6262
}

example/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "GigyaRnExample",
3-
"version": "0.6.2",
3+
"version": "0.6.3",
44
"private": true,
55
"scripts": {
66
"android": "react-native run-android",

example/yarn.lock

Lines changed: 126 additions & 109 deletions
Large diffs are not rendered by default.

ios/GigyaSdkWrapper.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ class GigyaSdkWrapper<T: GigyaAccountProtocol>: GigyaSdkWrapperProtocol {
7272
var currentResolver: GigyaResolverModelProtocol?
7373

7474
init(accountSchema: T.Type) {
75-
GigyaDefinitions.versionPrefix = "react_native_0.6.2_"
75+
GigyaDefinitions.versionPrefix = "react_native_0.6.3_"
7676
gigya = Gigya.sharedInstance(accountSchema)
7777
}
7878

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "@sap_oss/gigya-react-native-plugin-for-sap-customer-data-cloud",
33
"title": "React Native plug-in for SAP Customer Data Cloud",
4-
"version": "0.6.2",
4+
"version": "0.6.3",
55
"description": "A React Native plugin for interfacing SAP Customer Data Cloud",
66
"main": "src/index.js",
77
"scripts": {

src/__tests__/queue.test.js

Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
/**
2+
* Tests for RequestQueue
3+
*
4+
* Run with: npm test or yarn test
5+
*/
6+
7+
import { RequestQueue } from '../queue'
8+
9+
describe('RequestQueue', () => {
10+
let queue
11+
12+
beforeEach(() => {
13+
queue = new RequestQueue()
14+
})
15+
16+
test('should process single request', async () => {
17+
const result = await queue.enqueue(async () => {
18+
return 'test-result'
19+
})
20+
21+
expect(result).toBe('test-result')
22+
})
23+
24+
test('should process multiple concurrent requests sequentially', async () => {
25+
const results = []
26+
const delays = [50, 30, 10] // Different delays to test sequencing
27+
28+
const promises = delays.map((delay, index) =>
29+
queue.enqueue(async () => {
30+
await new Promise(resolve => setTimeout(resolve, delay))
31+
results.push(index)
32+
return index
33+
})
34+
)
35+
36+
const values = await Promise.all(promises)
37+
38+
// Results should be in order [0, 1, 2] because of queue sequencing
39+
expect(results).toEqual([0, 1, 2])
40+
expect(values).toEqual([0, 1, 2])
41+
})
42+
43+
test('should handle request errors without blocking queue', async () => {
44+
const results = []
45+
46+
const promise1 = queue.enqueue(async () => {
47+
results.push(1)
48+
return 1
49+
})
50+
51+
const promise2 = queue.enqueue(async () => {
52+
results.push(2)
53+
throw new Error('Test error')
54+
})
55+
56+
const promise3 = queue.enqueue(async () => {
57+
results.push(3)
58+
return 3
59+
})
60+
61+
const result1 = await promise1
62+
await expect(promise2).rejects.toThrow('Test error')
63+
const result3 = await promise3
64+
65+
expect(result1).toBe(1)
66+
expect(result3).toBe(3)
67+
expect(results).toEqual([1, 2, 3])
68+
})
69+
70+
test('should return correct queue size', () => {
71+
expect(queue.size()).toBe(0)
72+
73+
queue.enqueue(async () => {
74+
await new Promise(resolve => setTimeout(resolve, 100))
75+
})
76+
77+
queue.enqueue(async () => 'test')
78+
queue.enqueue(async () => 'test2')
79+
80+
// First request is processing, so queue size should be 2
81+
expect(queue.size()).toBeGreaterThanOrEqual(0)
82+
})
83+
84+
test('should clear pending requests', async () => {
85+
// Add requests
86+
queue.enqueue(async () => {
87+
await new Promise(resolve => setTimeout(resolve, 100))
88+
})
89+
90+
queue.enqueue(async () => 'test')
91+
92+
// Clear queue
93+
queue.clear()
94+
95+
expect(queue.size()).toBe(0)
96+
})
97+
98+
test('should simulate concurrent API calls', async () => {
99+
const mockApiCall = (id, delay = 10) => {
100+
return queue.enqueue(async () => {
101+
await new Promise(resolve => setTimeout(resolve, delay))
102+
return { id, timestamp: Date.now() }
103+
})
104+
}
105+
106+
// Simulate concurrent calls
107+
const results = await Promise.all([
108+
mockApiCall('call1', 30),
109+
mockApiCall('call2', 20),
110+
mockApiCall('call3', 10)
111+
])
112+
113+
// All calls should complete successfully
114+
expect(results).toHaveLength(3)
115+
expect(results[0].id).toBe('call1')
116+
expect(results[1].id).toBe('call2')
117+
expect(results[2].id).toBe('call3')
118+
119+
// Timestamps should be in order (sequential execution)
120+
expect(results[0].timestamp).toBeLessThanOrEqual(results[1].timestamp)
121+
expect(results[1].timestamp).toBeLessThanOrEqual(results[2].timestamp)
122+
})
123+
})

0 commit comments

Comments
 (0)