summaryrefslogtreecommitdiff
path: root/addons/point_of_sale/static/tests/tours/helpers/TicketScreenTourMethods.js
blob: fe8f8127b6a7e60f5df2d0612ca00765ca0609a2 (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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
odoo.define('point_of_sale.tour.TicketScreenTourMethods', function (require) {
    'use strict';

    const { createTourMethods } = require('point_of_sale.tour.utils');

    class Do {
        clickNewTicket() {
            return [{ trigger: '.ticket-screen .highlight' }];
        }
        clickDiscard() {
            return [{ trigger: '.ticket-screen button.discard' }];
        }
        selectOrder(orderName) {
            return [
                {
                    trigger: `.ticket-screen .order-row > .col:nth-child(2):contains("${orderName}")`,
                },
            ];
        }
        deleteOrder(orderName) {
            return [
                {
                    trigger: `.ticket-screen .orders > .order-row > .col:contains("${orderName}") ~ .col[name="delete"]`,
                },
            ];
        }
        selectFilter(name) {
            return [
                {
                    trigger: `.pos-search-bar .filter`,
                },
                {
                    trigger: `.pos-search-bar .filter ul`,
                    run: () => {},
                },
                {
                    trigger: `.pos-search-bar .filter ul li:contains("${name}")`,
                },
            ];
        }
        search(field, searchWord) {
            return [
                {
                    trigger: '.pos-search-bar input',
                    run: `text ${searchWord}`,
                },
                {
                    /**
                     * Manually trigger keydown event to show the search field list
                     * because the previous step do not trigger keydown event.
                     */
                    trigger: '.pos-search-bar input',
                    run: function () {
                        document
                            .querySelector('.pos-search-bar input')
                            .dispatchEvent(new KeyboardEvent('keydown', { key: '' }));
                    },
                },
                {
                    trigger: `.pos-search-bar .search ul li:contains("${field}")`,
                },
            ];
        }
        settleTips() {
            return [
                {
                    trigger: '.ticket-screen .buttons .settle-tips',
                },
            ];
        }
    }

    class Check {
        checkStatus(orderName, status) {
            return [
                {
                    trigger: `.ticket-screen .order-row > .col:nth-child(2):contains("${orderName}") ~ .col:nth-child(6):contains(${status})`,
                    run: () => {},
                },
            ];
        }
        /**
         * Check if the nth row contains the given string.
         * Note that 1st row is the header-row.
         */
        nthRowContains(n, string) {
            return [
                {
                    trigger: `.ticket-screen .orders > .order-row:nth-child(${n}):contains("${string}")`,
                    run: () => {},
                },
            ];
        }
        noNewTicketButton() {
            return [
                {
                    trigger: '.ticket-screen .controls .buttons:nth-child(1):has(.discard)',
                    run: () => {},
                },
            ];
        }
    }

    class Execute {}

    return createTourMethods('TicketScreen', Do, Check, Execute);
});