summaryrefslogtreecommitdiff
path: root/js/test/main.js
blob: ab02193536cfcad3799bc5d11cd362c5cc873fd0 (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
/*
  @licstart  The following is the entire license notice for the
  JavaScript code in this page.

  Copyright (C) 2018 Taler Systems SA.

  The JavaScript code in this page is free software: you can
  redistribute it and/or modify it under the terms of the GNU
  Lesser General Public License (GNU LGPL) as published by the
  Free Software Foundation, either version 2.1 of the License,
  or (at your option) any later version.  The code is distributed
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  LGPL for more details.

  As additional permission under GNU LGPL version 2.1 section 7,
  you may distribute non-source (e.g., minimized or compacted)
  forms of that code without the copy of the GNU LGPL normally
  required by section 4, provided you include this license notice
  and a URL through which recipients can access the Corresponding
  Source.

  @licend  The above is the entire license notice for the
  JavaScript code in this page.

  @author Marcello Stanisci
*/

const ava = require("ava");
const sinon = require("sinon");
const pd = require("pretty-data");

/* Adjusts context before each test.
 * In practice, it (1) mocks the global XHR
 * object, (2) nullifies addEventListener and
 * getElementById, (3) makes alert dialogs
 * appear as AVA logs, and (4) disables native
 * browser logging.  Finally, (5) it imports
 * the code to be tested.  */
ava.test.beforeEach(t => {
  function xhr_mock() {
    t.context.xhr = sinon.useFakeXMLHttpRequest();
    t.context.requests = [];
    t.context.xhr.onCreate = function(xhr){
      t.context.requests.push(xhr);};
    global.XMLHttpRequest = t.context.xhr;};
  function minor_mocks() {
    var document = {};
    document.addEventListener = ()=>{};
    document.getElementById = ()=>
      /* pacifies code that attempts
       * to change this property anyway.  */
      {return {style: {visibility: "hidden"}}};
    global.document = document;
    global.alert = console.log;
    // disable logging for tests
    global.console.log = function(){};
  };
  xhr_mock();
  minor_mocks();
  t.context.bo = require("../backoffice");
});

/* Both of following tests just check that the callback
 * which is in charge of modifying the page is called
 * with the right arguments.  */

ava.test("Tracking a wire transfer", (t) => {
  var mock_tracks = {
    deposits_sums: ["mock-tracks"],
    execution_time: "/Date(0)/"};

  var cb = sinon.spy();
  t.context.bo.track_transfer
    ("http://exchange.mock/", "mock-wtid", cb);
  t.context.requests[0].respond(200, "application/json",
                                JSON.stringify(mock_tracks));
  sinon.assert.calledWith
    (cb, true, mock_tracks.deposits_sums,
     mock_tracks.execution_time, "mock-wtid");
  t.pass();
});

ava.test("Tracking order id", t => {

  var cb = sinon.spy();
  t.context.bo.track_order(22, cb);

  // mocking a "/track/transaction" response from the backend
  var mock_tracks = [
    {wtid: "mock wtid",
     exchange_url: "http://exchange.mock/",
     amount: {value: 2, fraction: 0, currency: "MOCK"},
     execution_time: "mock /Date(0)/"}];

  t.context.requests[0].respond
    (200, "application/json",
     JSON.stringify(mock_tracks));

  sinon.assert.calledWith(cb, mock_tracks, 200);
  t.pass();
});