summaryrefslogtreecommitdiff
path: root/addons/point_of_sale/static/tests/unit/helpers/test_env.js
blob: c4b0b3ecef6641725d4dae3627ef779d85722edc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
odoo.define('point_of_sale.test_env', async function (require) {
    'use strict';

    /**
     * Many components in PoS are dependent on the PosModel instance (pos).
     * Therefore, for unit tests that require pos in the Components' env, we
     * prepared here a test env maker (makePosTestEnv) based on
     * makeTestEnvironment of web.
     */

    const makeTestEnvironment = require('web.test_env');
    const env = require('web.env');
    const models = require('point_of_sale.models');
    const Registries = require('point_of_sale.Registries');

    Registries.Component.add(owl.misc.Portal);

    await env.session.is_bound;
    const pos = new models.PosModel({
        rpc: env.services.rpc,
        session: env.session,
        do_action: async () => {},
        setLoadingMessage: () => {},
        setLoadingProgress: () => {},
        showLoadingSkip: () => {},
    });
    await pos.ready;

    /**
     * @param {Object} env default env
     * @param {Function} providedRPC mock rpc
     * @param {Function} providedDoAction mock do_action
     */
    function makePosTestEnv(env = {}, providedRPC = null, providedDoAction = null) {
        env = Object.assign(env, { pos });
        let posEnv = makeTestEnvironment(env, providedRPC);
        // Replace rpc in the PosModel instance after loading
        // data from the server so that every succeeding rpc calls
        // made by pos are mocked by the providedRPC.
        pos.rpc = posEnv.rpc;
        pos.do_action = providedDoAction;
        return posEnv;
    }

    return makePosTestEnv;
});