diff options
| author | Julien Mougenot <jum@odoo.com> | 2020-07-06 08:41:00 +0000 |
|---|---|---|
| committer | Julien Mougenot <jum@odoo.com> | 2020-07-07 08:33:28 +0000 |
| commit | cd1d339763d2251735f7b92d5c2d9a49eef69ce6 (patch) | |
| tree | 76980f0c70b5e16710696077e35817bfc2fa0a89 /addons/web/static/tests/views/sample_server_tests.js | |
| parent | e93b9aa2716222231d963b8e6b52a4c6fbce2a79 (diff) | |
[FIX] web: Make sample server tests deterministic
Before this commit, there were a few tests in the "sample server" suite
that asserted that every group resulting of a "read_group" would contain
at least one record, while there was actually a slight chance of it not
happening.
Now, the sample server used in the tests has been rendered deterministic
and these kind of issues are completely avoided.
closes odoo/odoo#54164
X-original-commit: a6d32ff46558b68ce3f19458f29c311ee5c658fd
Signed-off-by: Aaron Bohy (aab) <aab@odoo.com>
Signed-off-by: Julien Mougenot (jum) <jum@odoo.com>
Diffstat (limited to 'addons/web/static/tests/views/sample_server_tests.js')
| -rw-r--r-- | addons/web/static/tests/views/sample_server_tests.js | 104 |
1 files changed, 61 insertions, 43 deletions
diff --git a/addons/web/static/tests/views/sample_server_tests.js b/addons/web/static/tests/views/sample_server_tests.js index 5582585a0a1..af503494402 100644 --- a/addons/web/static/tests/views/sample_server_tests.js +++ b/addons/web/static/tests/views/sample_server_tests.js @@ -8,9 +8,31 @@ odoo.define('web.sample_server_tests', function (require) { const { MAIN_RECORDSET_SIZE, SEARCH_READ_LIMIT, // Limits SAMPLE_COUNTRIES, SAMPLE_PEOPLE, SAMPLE_TEXTS, // Text values - MAX_COLOR_INT, MAX_FLOAT, MAX_INTEGER, MAX_MONETARY // Number values + MAX_COLOR_INT, MAX_FLOAT, MAX_INTEGER, MAX_MONETARY, // Number values + SUB_RECORDSET_SIZE, // Records sise } = SampleServer; + /** + * Transforms random results into deterministic ones. + */ + class DeterministicSampleServer extends SampleServer { + constructor() { + super(...arguments); + this.arrayElCpt = 0; + this.boolCpt = 0; + this.subRecordIdCpt = 0; + } + _getRandomArrayEl(array) { + return array[this.arrayElCpt++ % array.length]; + } + _getRandomBool() { + return Boolean(this.boolCpt++ % 2); + } + _getRandomSubRecordId() { + return (this.subRecordIdCpt++ % SUB_RECORDSET_SIZE) + 1; + } + } + QUnit.module("Sample Server", { beforeEach() { this.fields = { @@ -62,7 +84,7 @@ odoo.define('web.sample_server_tests', function (require) { }); const allFieldNames = Object.keys(this.fields['res.users']); - const server = new SampleServer('res.users', this.fields['res.users']); + const server = new DeterministicSampleServer('res.users', this.fields['res.users']); const { records } = await server.mockRpc({ method: '/web/dataset/search_read', model: 'res.users', @@ -127,12 +149,12 @@ odoo.define('web.sample_server_tests', function (require) { assert.strictEqual(typeof rec.manager_id[0], 'number'); assert.ok(SAMPLE_PEOPLE.includes(rec.manager_id[1])); - assert.ok([1, 2].includes(rec.managed_ids.length)); + assert.strictEqual(rec.managed_ids.length, 2); assert.ok(rec.managed_ids.every( (id) => typeof id === 'number') ); - assert.ok([1, 2].includes(rec.tag_ids.length)); + assert.strictEqual(rec.tag_ids.length, 2); assert.ok(rec.tag_ids.every( (id) => typeof id === 'number') ); @@ -143,7 +165,7 @@ odoo.define('web.sample_server_tests', function (require) { QUnit.test("Sample data: country type", async function (assert) { assert.expect(1); - const server = new SampleServer('res.country', this.fields['res.country']); + const server = new DeterministicSampleServer('res.country', this.fields['res.country']); const { records } = await server.mockRpc({ method: '/web/dataset/search_read', model: 'res.country', @@ -156,7 +178,7 @@ odoo.define('web.sample_server_tests', function (require) { QUnit.test("Sample data: any type", async function (assert) { assert.expect(1); - const server = new SampleServer('hobbit', this.fields.hobbit); + const server = new DeterministicSampleServer('hobbit', this.fields.hobbit); const { records } = await server.mockRpc({ method: '/web/dataset/search_read', @@ -172,7 +194,7 @@ odoo.define('web.sample_server_tests', function (require) { QUnit.test("Send 'search_read' RPC: valid field names", async function (assert) { assert.expect(3); - const server = new SampleServer('hobbit', this.fields.hobbit); + const server = new DeterministicSampleServer('hobbit', this.fields.hobbit); const result = await server.mockRpc({ method: '/web/dataset/search_read', @@ -193,7 +215,7 @@ odoo.define('web.sample_server_tests', function (require) { QUnit.test("Send 'search_read' RPC: invalid field names", async function (assert) { assert.expect(3); - const server = new SampleServer('hobbit', this.fields.hobbit); + const server = new DeterministicSampleServer('hobbit', this.fields.hobbit); const result = await server.mockRpc({ method: '/web/dataset/search_read', @@ -214,7 +236,7 @@ odoo.define('web.sample_server_tests', function (require) { QUnit.test("Send 'web_read_group' RPC: no group", async function (assert) { assert.expect(1); - const server = new SampleServer('hobbit', this.fields.hobbit); + const server = new DeterministicSampleServer('hobbit', this.fields.hobbit); server.setExistingGroups([]); const result = await server.mockRpc({ @@ -227,9 +249,9 @@ odoo.define('web.sample_server_tests', function (require) { }); QUnit.test("Send 'web_read_group' RPC: 2 groups", async function (assert) { - assert.expect(6); + assert.expect(5); - const server = new SampleServer('hobbit', this.fields.hobbit); + const server = new DeterministicSampleServer('hobbit', this.fields.hobbit); const existingGroups = [ { profession: 'gardener', profession_count: 0 }, { profession: 'adventurer', profession_count: 0 }, @@ -246,9 +268,10 @@ odoo.define('web.sample_server_tests', function (require) { assert.strictEqual(result.length, 2); assert.strictEqual(result.groups.length, 2); - const professions = result.groups.map((g) => g.profession); - assert.ok(professions.includes("gardener")); - assert.ok(professions.includes("adventurer")); + assert.deepEqual( + result.groups.map((g) => g.profession), + ["gardener", "adventurer"] + ); assert.strictEqual( result.groups.reduce((acc, g) => acc + g.profession_count, 0), @@ -260,9 +283,9 @@ odoo.define('web.sample_server_tests', function (require) { }); QUnit.test("Send 'web_read_group' RPC: all groups", async function (assert) { - assert.expect(7); + assert.expect(5); - const server = new SampleServer('hobbit', this.fields.hobbit); + const server = new DeterministicSampleServer('hobbit', this.fields.hobbit); const existingGroups = [ { profession: 'gardener', profession_count: 0 }, { profession: 'brewer', profession_count: 0 }, @@ -280,10 +303,10 @@ odoo.define('web.sample_server_tests', function (require) { assert.strictEqual(result.length, 3); assert.strictEqual(result.groups.length, 3); - const professions = result.groups.map((g) => g.profession); - assert.ok(professions.includes("gardener")); - assert.ok(professions.includes("brewer")); - assert.ok(professions.includes("adventurer")); + assert.deepEqual( + result.groups.map((g) => g.profession), + ["gardener", "brewer", "adventurer"] + ); assert.strictEqual( result.groups.reduce((acc, g) => acc + g.profession_count, 0), @@ -297,7 +320,7 @@ odoo.define('web.sample_server_tests', function (require) { QUnit.test("Send 'read_group' RPC: no group", async function (assert) { assert.expect(1); - const server = new SampleServer('hobbit', this.fields.hobbit); + const server = new DeterministicSampleServer('hobbit', this.fields.hobbit); const result = await server.mockRpc({ method: 'read_group', @@ -313,9 +336,9 @@ odoo.define('web.sample_server_tests', function (require) { }); QUnit.test("Send 'read_group' RPC: groupBy", async function (assert) { - assert.expect(5); + assert.expect(3); - const server = new SampleServer('hobbit', this.fields.hobbit); + const server = new DeterministicSampleServer('hobbit', this.fields.hobbit); const result = await server.mockRpc({ method: 'read_group', @@ -325,12 +348,10 @@ odoo.define('web.sample_server_tests', function (require) { }); assert.strictEqual(result.length, 3); - - const professions = result.map((g) => g.profession); - assert.ok(professions.includes("gardener")); - assert.ok(professions.includes("brewer")); - assert.ok(professions.includes("adventurer")); - + assert.deepEqual( + result.map((g) => g.profession), + ["gardener", "brewer", "adventurer"] + ); assert.strictEqual( result.reduce((acc, g) => acc + g.profession_count, 0), MAIN_RECORDSET_SIZE, @@ -338,9 +359,9 @@ odoo.define('web.sample_server_tests', function (require) { }); QUnit.test("Send 'read_group' RPC: groupBy and field", async function (assert) { - assert.expect(6); + assert.expect(4); - const server = new SampleServer('hobbit', this.fields.hobbit); + const server = new DeterministicSampleServer('hobbit', this.fields.hobbit); const result = await server.mockRpc({ method: 'read_group', @@ -350,17 +371,14 @@ odoo.define('web.sample_server_tests', function (require) { }); assert.strictEqual(result.length, 3); - - const professions = result.map((g) => g.profession); - assert.ok(professions.includes("gardener")); - assert.ok(professions.includes("brewer")); - assert.ok(professions.includes("adventurer")); - + assert.deepEqual( + result.map((g) => g.profession), + ["gardener", "brewer", "adventurer"] + ); assert.strictEqual( result.reduce((acc, g) => acc + g.profession_count, 0), MAIN_RECORDSET_SIZE, ); - assert.strictEqual( result.reduce((acc, g) => acc + g.age, 0), server.data.hobbit.records.reduce((acc, g) => acc + g.age, 0) @@ -370,7 +388,7 @@ odoo.define('web.sample_server_tests', function (require) { QUnit.test("Send 'read_group' RPC: multiple groupBys and lazy", async function (assert) { assert.expect(2); - const server = new SampleServer('hobbit', this.fields.hobbit); + const server = new DeterministicSampleServer('hobbit', this.fields.hobbit); const result = await server.mockRpc({ method: 'read_group', @@ -386,7 +404,7 @@ odoo.define('web.sample_server_tests', function (require) { QUnit.test("Send 'read_group' RPC: multiple groupBys and not lazy", async function (assert) { assert.expect(2); - const server = new SampleServer('hobbit', this.fields.hobbit); + const server = new DeterministicSampleServer('hobbit', this.fields.hobbit); const result = await server.mockRpc({ method: 'read_group', @@ -403,7 +421,7 @@ odoo.define('web.sample_server_tests', function (require) { QUnit.test("Send 'read' RPC: no id", async function (assert) { assert.expect(1); - const server = new SampleServer('hobbit', this.fields.hobbit); + const server = new DeterministicSampleServer('hobbit', this.fields.hobbit); const result = await server.mockRpc({ method: 'read', @@ -419,7 +437,7 @@ odoo.define('web.sample_server_tests', function (require) { QUnit.test("Send 'read' RPC: one id", async function (assert) { assert.expect(3); - const server = new SampleServer('hobbit', this.fields.hobbit); + const server = new DeterministicSampleServer('hobbit', this.fields.hobbit); const result = await server.mockRpc({ method: 'read', @@ -440,7 +458,7 @@ odoo.define('web.sample_server_tests', function (require) { QUnit.test("Send 'read' RPC: more than all available ids", async function (assert) { assert.expect(1); - const server = new SampleServer('hobbit', this.fields.hobbit); + const server = new DeterministicSampleServer('hobbit', this.fields.hobbit); const amount = MAIN_RECORDSET_SIZE + 3; const ids = new Array(amount).fill().map((_, i) => i + 1); |
