Skip to content

Commit ac5c8f1

Browse files
author
Ali Rıza Kat
committed
Refactoring Some More
1 parent ade4be6 commit ac5c8f1

File tree

5 files changed

+76
-99
lines changed

5 files changed

+76
-99
lines changed

test/helpers/helper_functions.js

Lines changed: 35 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
/* eslint-disable no-unused-vars */
2+
/* eslint-disable no-console */
3+
/* global runthis */
24
var path = require("path");
35
var assert = require("assert");
46
var fs = require("fs");
@@ -203,28 +205,41 @@ function sessionRequestValidator(beginSs, endSs, time, id) {
203205
assert.equal(time, endSs.session_duration);
204206
}
205207
}
206-
/**
207-
* bunch of tests specifically gathered for testing user details
208-
* @param {Object} originalDetails - Original object that contains user details
209-
* @param {Object} details - Object from cly_queue that corresponds to user details recording
210-
*/
211-
function userDetailRequestValidator(originalDetails, details) {
212-
requestBaseParamValidator(details);
213-
var user = JSON.parse(details.user_details);
214-
assert.equal(originalDetails.name, user.name);
215-
assert.equal(originalDetails.username, user.username);
216-
assert.equal(originalDetails.email, user.email);
217-
assert.equal(originalDetails.organization, user.organization);
218-
assert.equal(originalDetails.phone, user.phone);
219-
assert.equal(originalDetails.picture, user.picture);
220-
assert.equal(originalDetails.gender, user.gender);
221-
assert.equal(originalDetails.byear, user.byear);
222-
if (typeof originalDetails.custom !== 'undefined') {
223-
for (var key in originalDetails.custom) {
224-
assert.deepStrictEqual(originalDetails.custom[key], user.custom[key]);
208+
209+
function validateUserDetails(actual, expected) {
210+
// Helper function to remove undefined values
211+
const cleanObj = (obj) => {
212+
if (typeof obj === "string") {
213+
try {
214+
// Parse if it's a JSON string
215+
obj = JSON.parse(obj);
216+
}
217+
catch (e) {
218+
console.error("Invalid JSON string:", obj);
219+
// Return null for invalid JSON
220+
return null;
221+
}
225222
}
223+
// Remove properties with undefined values
224+
return Object.fromEntries(Object.entries(obj).filter(([_, value]) => value !== undefined));
225+
};
226+
const cleanedActual = cleanObj(actual);
227+
const cleanedExpected = cleanObj(expected);
228+
if (!cleanedActual || !cleanedExpected) {
229+
// If either cleaned object is null, validation fails
230+
return false;
231+
}
232+
// Perform deep strict comparison after cleaning up undefined values
233+
try {
234+
assert.deepStrictEqual(cleanedActual, cleanedExpected);
235+
return true;
236+
}
237+
catch (e) {
238+
console.log("Validation failed:", e);
239+
return false;
226240
}
227241
}
242+
228243
/**
229244
* bunch of tests specifically gathered for testing page views
230245
* @param {Object} name - page name
@@ -257,7 +272,7 @@ module.exports = {
257272
eventValidator,
258273
crashRequestValidator,
259274
sessionRequestValidator,
260-
userDetailRequestValidator,
275+
validateUserDetails,
261276
viewEventValidator,
262277
doesFileStoragePathsExist,
263278
};

test/helpers/test_utils.js

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,15 +31,13 @@ var userDetailObj = {
3131
phone: "+987654321",
3232
picture: "https://example.com/images/profile_alex.jpg",
3333
gender: "Female",
34-
byear: 1992, // birth year
34+
byear: 1992,
3535
custom: {
3636
string_value: "example",
3737
number_value: 42,
3838
boolean_value: true,
3939
array_value: ["item1", "item2"],
4040
object_value: { nested_key: "nested_value" },
41-
null_value: null,
42-
undefined_value: undefined,
4341
},
4442
};
4543

test/tests_bulk.js

Lines changed: 29 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ var testUtils = require("./helpers/test_utils");
88

99
const { StorageTypes } = CountlyBulk;
1010

11+
var appKey = "YOUR_APP_KEY";
12+
var serverUrl = "https://tests.url.cly";
13+
1114
function validateCrash(validator, nonfatal) {
1215
assert.ok(validator.crash._os);
1316
assert.ok(validator.crash._os_version);
@@ -20,58 +23,6 @@ function validateCrash(validator, nonfatal) {
2023
assert.equal(true, validator.crash._not_os_specific);
2124
}
2225

23-
// note: this can replace the current one in the helper functions
24-
function validateUserDetails(actual, expected) {
25-
const keys = ['name', 'username', 'email', 'organization', 'phone', 'picture', 'gender', 'byear', 'custom'];
26-
let isValid = true;
27-
28-
keys.forEach((key) => {
29-
if (typeof actual[key] === 'object' && actual[key] !== null) {
30-
if (Array.isArray(actual[key])) {
31-
if (!Array.isArray(expected[key]) || JSON.stringify(actual[key]) !== JSON.stringify(expected[key])) {
32-
console.error(`Mismatch for key "${key}": expected "${JSON.stringify(expected[key])}", but got "${JSON.stringify(actual[key])}"`);
33-
isValid = false;
34-
}
35-
}
36-
else {
37-
if (JSON.stringify(actual[key]) !== JSON.stringify(expected[key])) {
38-
console.error(`Mismatch for key "${key}": expected "${JSON.stringify(expected[key])}", but got "${JSON.stringify(actual[key])}"`);
39-
isValid = false;
40-
}
41-
}
42-
}
43-
else if (actual[key] !== expected[key]) {
44-
console.error(`Mismatch for key "${key}": expected "${expected[key]}", but got "${actual[key]}"`);
45-
isValid = false;
46-
}
47-
});
48-
// Validate nested custom object separately
49-
if (expected.custom && actual.custom) {
50-
const customKeys = Object.keys(expected.custom);
51-
customKeys.forEach((key) => {
52-
if (typeof actual.custom[key] === 'object' && actual.custom[key] !== null) {
53-
if (Array.isArray(actual.custom[key])) {
54-
if (!Array.isArray(expected.custom[key]) || JSON.stringify(actual.custom[key]) !== JSON.stringify(expected.custom[key])) {
55-
console.error(`Mismatch in custom object for key "${key}": expected "${JSON.stringify(expected.custom[key])}", but got "${JSON.stringify(actual.custom[key])}"`);
56-
isValid = false;
57-
}
58-
}
59-
else {
60-
if (JSON.stringify(actual.custom[key]) !== JSON.stringify(expected.custom[key])) {
61-
console.error(`Mismatch in custom object for key "${key}": expected "${JSON.stringify(expected.custom[key])}", but got "${JSON.stringify(actual.custom[key])}"`);
62-
isValid = false;
63-
}
64-
}
65-
}
66-
else if (actual.custom[key] !== expected.custom[key]) {
67-
console.error(`Mismatch in custom object for key "${key}": expected "${expected.custom[key]}", but got "${actual.custom[key]}"`);
68-
isValid = false;
69-
}
70-
});
71-
}
72-
return isValid;
73-
}
74-
7526
// Create bulk data
7627
function createBulkData(bulk) {
7728
// Add an event
@@ -121,7 +72,7 @@ function validateCreatedBulkData(bulk) {
12172

12273
var req = reqQueue[0]; // read user details queue
12374
const actualUserDetails = req.user_details; // Extract the user_details from the actual request
124-
const isValid = validateUserDetails(actualUserDetails, testUtils.getUserDetailsObj());
75+
const isValid = hp.validateUserDetails(actualUserDetails, testUtils.getUserDetailsObj());
12576
assert.equal(true, isValid);
12677

12778
var testUser3Request = reqQueue.find((request) => request.device_id === "TestUser3");
@@ -147,8 +98,8 @@ describe("Bulk Tests", () => {
14798

14899
it("1- CNR", (done) => {
149100
var bulk = new CountlyBulk({
150-
app_key: "YOUR_APP_KEY",
151-
url: "https://try.count.ly",
101+
app_key: appKey,
102+
url: serverUrl,
152103
});
153104
assert.equal(storage.getStoragePath(), undefined);
154105
shouldFilesExist(false);
@@ -163,8 +114,8 @@ describe("Bulk Tests", () => {
163114

164115
it("2- CNR_cPath_file", (done) => {
165116
var bulk = new CountlyBulk({
166-
app_key: "YOUR_APP_KEY",
167-
url: "https://try.count.ly",
117+
app_key: appKey,
118+
url: serverUrl,
168119
storage_path: "../test/customStorageDirectory/",
169120
storage_type: StorageTypes.FILE,
170121
});
@@ -182,8 +133,8 @@ describe("Bulk Tests", () => {
182133

183134
it("3- CNR_file", (done) => {
184135
var bulk = new CountlyBulk({
185-
app_key: "YOUR_APP_KEY",
186-
url: "https://try.count.ly",
136+
app_key: appKey,
137+
url: serverUrl,
187138
storage_type: StorageTypes.FILE,
188139
});
189140
assert.equal(storage.getStoragePath(), "../bulk_data/");
@@ -197,9 +148,27 @@ describe("Bulk Tests", () => {
197148
done();
198149
}, hp.mWait);
199150
});
151+
152+
it("4- CNR_memory", (done) => {
153+
var bulk = new CountlyBulk({
154+
app_key: appKey,
155+
url: serverUrl,
156+
storage_type: StorageTypes.MEMORY,
157+
});
158+
assert.equal(storage.getStoragePath(), undefined);
159+
shouldFilesExist(true);
160+
createBulkData(bulk);
161+
162+
setTimeout(() => {
163+
validateCreatedBulkData(bulk);
164+
shouldFilesExist(true);
165+
assert.equal(storage.getStoragePath(), undefined);
166+
done();
167+
}, hp.mWait);
168+
});
200169
});
201170

202171
// Currently tested: CNR, CNR_cPath_file, CNR_file
203172
// TODO: Add tests for the following:
204-
// - CNR: memory, cPath_memory, persistTrue, persistFalse, cPath_persistTrue, cPath_persistFalse, persistTrue_file, persistFalse_file, cPath_persistTrue_file, cPath_persistFalse_file
173+
// - CNR: cPath_memory, persistTrue, persistFalse, cPath_persistTrue, cPath_persistFalse, persistTrue_file, persistFalse_file, cPath_persistTrue_file, cPath_persistFalse_file
205174
// - CR_CG for all of the above

test/tests_storage.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -379,7 +379,7 @@ describe("Storage Tests", () => {
379379
Countly.user_details(testUtils.getUserDetailsObj);
380380
const storedData = storage.storeGet("cly_queue", null);
381381
const userDetailsReq = storedData[0];
382-
hp.userDetailRequestValidator(testUtils.getUserDetailsObj, userDetailsReq);
382+
hp.validateUserDetails(testUtils.getUserDetailsObj, userDetailsReq);
383383
done();
384384
});
385385

test/tests_user_details.js

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,26 @@
11
/* eslint-disable no-console */
2+
const assert = require("assert");
23
var Countly = require("../lib/countly");
34
var hp = require("./helpers/helper_functions");
45
var testUtils = require("./helpers/test_utils");
56

6-
// init function
7-
function initMain() {
8-
Countly.init({
9-
app_key: "YOUR_APP_KEY",
10-
url: "https://try.count.ly",
11-
interval: 10000,
12-
max_events: -1,
13-
});
14-
}
15-
167
describe("User details tests", () => {
178
beforeEach(async() => {
189
await hp.clearStorage();
1910
});
2011
it("Record and validate all user details", (done) => {
21-
// initialize SDK
22-
initMain();
23-
// send user details
24-
Countly.user_details(testUtils.getUserDetailsObj());
12+
Countly.init({
13+
app_key: "YOUR_APP_KEY",
14+
url: "https://try.count.ly",
15+
});
16+
var userDetailObj = testUtils.getUserDetailsObj();
17+
Countly.user_details(userDetailObj);
2518
// read event queue
2619
setTimeout(() => {
2720
var req = hp.readRequestQueue()[0];
28-
hp.userDetailRequestValidator(testUtils.getUserDetailsObj(), req);
21+
const actualUserDetails = req.user_details;
22+
const isValid = hp.validateUserDetails(actualUserDetails, userDetailObj);
23+
assert.equal(true, isValid);
2924
done();
3025
}, hp.sWait);
3126
});

0 commit comments

Comments
 (0)