示例#1
0
exports.parse_string_field_mixed = function(test) {
    test.expect(2);

    // textforms
    var doc = {
        message: "0000 foo 16A"
    };
    var def = {
        fields: {
            foo: {
                type: 'string',
                labels: {
                    short: 'foo',
                    tiny: 'foo'
                }
            }
        }
    };
    var data = smsparser.parse(def, doc);
    test.same(data, {foo: "16A"});

    // muvuku
    doc = {
        message: "1!0000!16A"
    };
    data = smsparser.parse(def, doc);
    test.same(data, {foo: "16A"});

    test.done();
};
示例#2
0
exports.parse_date_field = function(test) {
    test.expect(2);

    var doc = {
        message: "1!0000!2012-03-12"
    };

    var def = {
        fields: {
            testdate: {
                type: 'date',
                labels: {
                    short: 'testdate',
                    tiny: 'TDATE'
                }
            }
        }
    };

    var data = smsparser.parse(def, doc);
    test.same(data, {testdate: 1331510400000});


    doc = {
        message: "0000 TDATE 2012-03-12"
    };

    data = smsparser.parse(def, doc);
    test.same(data, {testdate: 1331510400000});


    test.done();
};
示例#3
0
exports['parse string field leading zero'] = function(test) {
    test.expect(2);

    // textforms
    var doc = {
        message: "0000 foo 012345"
    };
    var def = {
        meta: {
            code: '0000'
        },
        fields: {
            foo: {
                type: 'string',
                labels: {
                    short: 'foo',
                    tiny: 'foo'
                }
            }
        }
    };
    var data = smsparser.parse(def, doc);
    test.same(data, {foo: "012345"});

    // muvuku
    doc = {
        message: "1!0000!012345"
    };
    data = smsparser.parse(def, doc);
    test.same(data, {foo: "012345"});

    test.done();
};
示例#4
0
var msbb_example_data_with_only_required_fields = function (test) {
    var def = jsonforms.getForm('MSBB');
    var doc = {
        sent_timestamp: '2-1-12 15:35',
        from: '+13125551212',
        message: '1!MSBB!2012#1#24###bbbbbb'
    };

    var obj = smsparser.parse(def, doc);
    var expectedObj = {
        ref_year: '2012',
        ref_month: '1',
        ref_day: 24,
        ref_rc: null,
        ref_hour: null,
        ref_name: 'bbbbbb',
        ref_age: undefined,
        ref_reason: undefined,
        ref_reason_other: undefined
    };

    test.same(obj, expectedObj);
    
    test.done();
};
示例#5
0
var add_sms = exports.add_sms = function(doc, request) {

    req = request;
    var options = {
        type: 'sms_message',
        form: smsparser.getFormCode(req.form.message)
    };
    options = _.extend(req.form, options);

    // if locale was not passed in form data then check query string
    if (!options.locale) {
        options.locale = (req.query && req.query.locale) || utils.info.locale;
    }

    var def = utils.info.getForm(options.form),
        form_data = null,
        resp;

    if (options.form && def) {
        form_data = smsparser.parse(def, options);
    }

    var record = getDataRecord(options, form_data);

    return [
        record,
        JSON.stringify(getDefaultResponse(record))
    ];

};
示例#6
0
exports['parse empty list field'] = function(test) {
    test.expect(1);

    var sms = {
        message: "1!0000!1#"
    };

    var def = {
        fields: {
            "q1": {
                type: "integer",
                list: [[0, "Yes"], [1, "No"]],
                labels: {
                    short: "question 1"
                }
            },
            "q2": {
                type: "integer",
                list: [[0, "Yes"], [1, "No"]],
                labels: {
                    short: "question 2"
                }
            }
        }
    };

    var data = smsparser.parse(def, sms);
    // q2 should be null. empty string attempted to be parsed as number.
    test.same(data, {q1: "No", q2: null});
    test.done();
};
示例#7
0
exports.missing_fields = function(test) {
    test.expect(1);

    var doc = {
            "message":"1!YYYY!facility#2011#11#1#1#2#3",
            "type":"sms_message",
            "form":"YYYY"},
        def = jsonforms.getForm(doc.form),
        data = smsparser.parse(def, doc);

    test.same(data, {
        "facility_id": "facility",
        "year": "2011",
        "month": "11",
        "misoprostol_administered": true,
        "quantity_dispensed": {
            "la_6x1": 1,
            "la_6x2": 2,
            "cotrimoxazole": 3,
            "zinc": undefined,
            "ors": undefined,
            "eye_ointment": undefined,
        },
        "days_stocked_out": {
            "la_6x1": undefined,
            "la_6x2": undefined,
            "cotrimoxazole": undefined,
            "zinc": undefined,
            "ors": undefined,
            "eye_ointment": undefined
        }
    });

    test.done();
};
示例#8
0
exports.msbr_example_data = function (test) {
    var def = jsonforms.getForm('MSBR');
    var doc = {
        sent_timestamp: '1-13-12 15:35',
        from: '+15551212',
        message: '1!MSBR!2012#12#20#12345678901#1111#bbbbbbbbbbbbbbbbbbbb#22#10#cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc'
    };

    test.expect(2);

    var obj = smsparser.parse(def, doc);
    var expectedObj = {
        ref_year: '2012',
        ref_month: '12',
        ref_day: 20,
        ref_rc: 12345678901,
        ref_hour: '1111',
        ref_name: 'bbbbbbbbbbbbbbbbbbbb',
        ref_age: 22,
        ref_reason: 'Diarrhée grave',
        ref_reason_other: 'cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc'
    };

    //console.log(obj);
    //console.log(expectedObj);

    test.same(obj, expectedObj);

    var arr = smsparser.parseArray(def, doc);
    var expectedArr = ['1-13-12 15:35', '+15551212', '2012', '12', '20', '12345678901', '1111', 'bbbbbbbbbbbbbbbbbbbb', '22', '10', 'cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc']

    test.same(arr, expectedArr);

    test.done();
};
示例#9
0
exports.msbb_example_data = function (test) {
    test.expect(2);

    var def = jsonforms.getForm('MSBB');
    var doc = {
        sent_timestamp: '2-1-12 15:35',
        from: '+13125551212',
        message: '1!MSBB!2012#2#1#12345678901#1111#bbbbbbbbbbbbbbbbbbbb#22#15#cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc'
    };

    var obj = smsparser.parse(def, doc);
    var expectedObj = {
        ref_year: 2012,
        ref_month: 2,
        ref_day: 1,
        ref_rc: '12345678901',
        ref_hour: 1111,
        ref_name: 'bbbbbbbbbbbbbbbbbbbb',
        ref_age: 22,
        ref_reason: 'Autres',
        ref_reason_other: 'cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc'
    };

    test.same(obj, expectedObj);

    msbb_example_data_with_only_required_fields(test);
};
示例#10
0
exports.msbg_example_data = function (test) {
    var def = jsonforms.getForm('MSBG');
    var doc = {
        sent_timestamp: '1-16-12 15:35',
        from: '+15551212',
        message: '1!MSBG!2012#1#12345678901#123#456#789#123#456#789#123#456#789'
    };

    test.expect(2);

    var obj = smsparser.parse(def, doc);
    var expectedObj = {
        case_year: '2012',
        case_month: '1',
        monthly_rc: "12345678901",
        monthly_cta1: 123,
        monthly_cta2: 456,
        monthly_cta3: 789,
        monthly_sro1: 123,
        monthly_sro2: 456,
        monthly_sro3: 789,
        monthly_ctm1: 123,
        monthly_ctm2: 456,
        monthly_ctm3: 789
    };

    test.same(obj, expectedObj);

    var arr = smsparser.parseArray(def, doc);
    var expectedArr = ['1-16-12 15:35', '+15551212', '2012', '1', 12345678901, 123, 456, 789, 123, 456, 789, 123, 456, 789];

    test.same(arr, expectedArr);

    test.done();
};
示例#11
0
exports.wrong_field_type = function(test) {
    test.expect(1);

    var doc = {
            "message":"1!YYYY!facility#2011#11#yyyyy#zzzz#2#3#4#5#6#9#8#7#6#5#4",
            "type":"sms_message",
            "form":"YYYY"},
        def = jsonforms.getForm(doc.form),
        data = smsparser.parse(def, doc);

    test.same(data, {
        "facility_id": "facility",
        "year": "2011",
        "month": "11",
        "misoprostol_administered": null,
        "quantity_dispensed": {
            "la_6x1": null,
            "la_6x2": 2,
            "cotrimoxazole": 3,
            "zinc": 4,
            "ors": 5,
            "eye_ointment": 6,
        },
        "days_stocked_out": {
            "la_6x1": 9,
            "la_6x2": 8,
            "cotrimoxazole": 7,
            "zinc": 6,
            "ors": 5,
            "eye_ointment": 4
        }
    });

    test.done();
};
示例#12
0
exports['non ascii code is accepted'] = function(test) {
    test.expect(3);

    var def = {
        meta: {
            code: 'ग'
        },
        fields: {
            foo: {
                type: 'string',
                labels: {
                    short: 'foo',
                    tiny: 'foo'
                }
            }
        }
    };

    // textforms
    var doc = {
        message: "ग foo 16A"
    };
    var data = smsparser.parse(def, doc);
    test.same(data, {foo: "16A"});

    // compact
    var doc = {
        message: "ग 16A"
    };
    var data = smsparser.parse(def, doc);
    test.same(data, {foo: "16A"});

    // muvuku
    doc = {
        message: "1!ग!16A"
    };
    data = smsparser.parse(def, doc);
    test.same(data, {foo: "16A"});

    test.done();

};
示例#13
0
exports['form not found'] = function(test) {
    test.expect(1);
    var doc = {
            "message":"1!X0X0!facility#2011#11#1#2#3#4#5#6#9#8#7#6#5#4",
            "type":"sms_message",
            "form":"X0X0"},
        def = utils.info.getForm(doc.form),
        data = smsparser.parse(def, doc);
    test.same({}, data);
    test.done();
};
示例#14
0
exports.parse_date_field_yyyz = function(test) {
    test.expect(2);

    var doc = {
        message: "1!YYYZ!##2012-03-12"
    };

    var def = jsonforms.getForm('YYYZ');

    var data = smsparser.parse(def, doc);
    test.same(data, {one:null, two:null, birthdate: 1331510400000});

    doc = {
        message: "YYYZ BIR2012-03-12"
    };

    data = smsparser.parse(def, doc);
    test.same(data, {birthdate: 1331510400000});

    test.done();
};
示例#15
0
exports.validations_is_numeric_month_stays_numeric = function(test) {
    test.expect(1);

    var doc = { message: "1!YYYY!foo#2011#11#" },
        form = smsparser.getFormCode(doc.message),
        def = jsonforms.getForm(form),
        data = smsparser.parse(def, doc);

    test.same(11, data.month);

    test.done();
};
示例#16
0
exports['support uppercase field keys'] = function(test) {

    var def = {
        meta: {
            code: 'R'
        },
        fields: {
            OOOOO: {
                type: 'string',
                labels: {
                    tiny: 'n'
                }
            }
        }
    };

    // textforms
    var doc = {
        message: "R n jane",
    };
    data = smsparser.parse(def, doc);
    test.same(data, {OOOOO: "jane"});

    // compact textforms
    doc = {
        message: "R jane"
    };
    data = smsparser.parse(def, doc);
    test.same(data, {OOOOO: "jane"});

    // muvuku
    doc = {
        message: "1!R!jane"
    };
    data = smsparser.parse(def, doc);
    test.same(data, {OOOOO: "jane"});

    test.done();

};
示例#17
0
exports.textforms_w_numeric_string = function(test) {
    test.expect(3);

    var doc = { message: 'YYYY CDT33#HFI001#ZDT999#RPY2012' },
        def = jsonforms.getForm('YYYY'),
        data = smsparser.parse(def, doc);

    test.same(data, {
        facility_id: '001',
        quantity_dispensed: {
            cotrimoxazole: 33,
            zinc: 999
        },
        year: 2012
    });

    doc = { message: 'YYYY CDT33#HFI01ach#ZDT999#RPY2012' },
    data = smsparser.parse(def, doc);

    test.same(data, {
        facility_id: '01ach',
        quantity_dispensed: {
            cotrimoxazole: 33,
            zinc: 999
        },
        year: 2012
    });

    doc = { message: 'YYYY CDT33#ZDT999#RPY2012' },
    data = smsparser.parse(def, doc);

    test.same(data, {
        quantity_dispensed: {
            cotrimoxazole: 33,
            zinc: 999
        },
        year: 2012
    });
    test.done();
};
示例#18
0
exports['parse javarosa message with special characters in a value'] = function (test) {
    var getForm = sinon.stub(utils.info, 'getForm').returns(definitions.forms.YYYY);
    var def = utils.info.getForm('YYYY');
    var doc = {
        sent_timestamp: '12-11-11 15:00',
        from: '+15551212',
        message: 'J1!YYYY!HFI#!fac*!?ty!#RPY#2015'
    };
    var obj = smsparser.parse(def, doc);
    test.same(obj.facility_id, "!fac*!?ty!");
    test.same(obj.year, 2015);
    test.done();
};
示例#19
0
exports['validations is numeric month stays numeric'] = function(test) {
    test.expect(2);

    var getForm = sinon.stub(utils.info, 'getForm').returns(definitions.forms.YYYY);
    var doc = { message: "1!YYYY!foo#2011#11#" },
        form = smsparser.getFormCode(doc.message),
        def = utils.info.getForm(form),
        data = smsparser.parse(def, doc);

    test.ok(getForm.alwaysCalledWith('YYYY'));
    test.same(11, data.month);

    test.done();
};
示例#20
0
exports['parse date field yyyz'] = function(test) {
    test.expect(3);

    var getForm = sinon.stub(utils.info, 'getForm').returns(definitions.forms.YYYZ);
    var doc = {
        message: "1!YYYZ!##2012-03-12"
    };

    var def = utils.info.getForm('YYYZ');

    var data = smsparser.parse(def, doc);
    test.ok(getForm.alwaysCalledWith('YYYZ'));
    test.same(data, {one:null, two:null, birthdate: 1331510400000});

    doc = {
        message: "YYYZ BIR2012-03-12"
    };

    data = smsparser.parse(def, doc);
    test.same(data, {birthdate: 1331510400000});

    test.done();
};
示例#21
0
exports['parse boolean field'] = function(test) {
    test.expect(2);
    var doc = {
        message: "1!0000!1"
    };
    var def = {
        fields: {
            testbool: {
                type: 'boolean',
                labels: 'testbool'
            }
        }
    };
    var data = smsparser.parse(def, doc);
    test.same(data, {testbool: true});

    doc = {
        message: "1!0000!0"
    };
    data = smsparser.parse(def, doc);
    test.same(data, {testbool: false});

    test.done();
};
exports['compact textforms handles registrations starting with N'] = function(test) {
    var doc = {
        sent_timestamp: '1-13-12 15:35',
        from: '+15551212',
        message: 'R North West'
    };

    var expectedObj = {
        name: 'North West'
    };

    var obj = smsparser.parse(defR, doc);
    test.same(obj, expectedObj);
    test.done();
};
示例#23
0
exports.textforms_numeric_no_spaces = function(test) {
    test.expect(1);

    var doc = { message: 'YYYY CDT33#ZDT999#RPY2012' },
        def = jsonforms.getForm('YYYY'),
        data = smsparser.parse(def, doc);

    test.same(data, {
        quantity_dispensed: {
            cotrimoxazole: 33,
            zinc: 999
        },
        year: 2012
    });
    test.done();
};
exports['compact textforms handles too few fields'] = function(test) {
    var doc = {
        sent_timestamp: '1-13-12 15:35',
        from: '+15551212',
        message: 'ANCR "Sarah Connor" 24'
    };

    var expectedObj = {
        name: 'Sarah Connor',
        lmp: 24
    };

    var obj = smsparser.parse(def, doc);
    test.same(obj, expectedObj);
    test.done();
};
示例#25
0
exports.msbp_example_data = function (test) {
    var def = jsonforms.getForm('MSBP');
    var doc = {
        sent_timestamp: '1-16-12 19:35',
        from: '+15551212',
        message: '1!MSBP!2012#1#16#12345678901#123#456#789#123#456#789#123#456#789#123#456#789#123#456#789#123'
    };

    test.expect(2);

    var obj = smsparser.parse(def, doc);
    var expectedObj = {
        case_year: '2012',
        case_month: '1',
        case_day: 16,
        case_rc: 12345678901,
        case_pec_m: 123,
        case_pec_f: 456,
        case_urg_m: 789,
        case_urg_f: 123,
        case_tdr: 456,
        case_palu_m: 789,
        case_palu_f: 123,
        case_dia_m: 456,
        case_dia_f: 789,
        case_pneu_m: 123,
        case_pneu_f: 456,
        case_mal_m: 789,
        case_mal_f: 123,
        case_rev: 456,
        case_vad: 789,
        case_edu: 123
    };

    //console.log(obj);
    //console.log(expectedObj);

    test.same(obj, expectedObj);

    var arr = smsparser.parseArray(def, doc);
    var expectedArr = ['1-16-12 19:35', '+15551212', '2012', '1', 16, 12345678901, 123, 456, 789, 123, 456, 789, 123, 456, 789, 123, 456, 789, 123, 456, 789, 123];

    test.same(arr, expectedArr);

    test.done();
};
示例#26
0
exports['textforms without hash delim'] = function(test) {
    test.expect(2);

    var getForm = sinon.stub(utils.info, 'getForm').returns(definitions.forms.YYYY);
    var doc = { message: 'YYYY CDT 33 HFI foobar ZDT 999 RPY 2012' },
        def = utils.info.getForm('YYYY'),
        data = smsparser.parse(def, doc);

    test.ok(getForm.alwaysCalledWith('YYYY'));
    test.same(data, {
        "quantity_dispensed": {
            "cotrimoxazole": null
        }
    });

    test.done();
};
exports['compact textforms handles too many fields'] = function(test) {
    var doc = {
        sent_timestamp: '1-13-12 15:35',
        from: '+15551212',
        message: 'ANCR "Sarah Connor" 24 2012-03-12 comment'
    };

    var expectedObj = {
        name: 'Sarah Connor',
        lmp: 24,
        somedate: 1331510400000
    };

    var obj = smsparser.parse(def, doc);
    test.same(obj, expectedObj);
    test.done();
};
示例#28
0
exports['valid javarosa message with similarly named fields parses right'] = function (test) {
    var getForm = sinon.stub(utils.info, 'getForm').returns({
        "meta": {
          "code": "T",
          "label": "Test"
        },
        "fields": {
          "problem": {
            "labels": {
              "short": "Health Facility Identifier",
              "tiny": "P"
            },
            "type": "string"
          },
          "meta_problem": {
            "labels": {
              "short": "Health Facility Identifier",
              "tiny": "MetaP"
            },
            "type": "string"
          }
        }
    });
    var def = utils.info.getForm('T');
    var doc = {
        sent_timestamp: '12-11-11 15:00',
        from: '+15551212',
        message: 'J1!T!p#Bar#metap#foo'
    };

    var obj = smsparser.parse(def, doc);

    test.ok(getForm.alwaysCalledWith('T'));
    test.same(obj, {
        problem: "Bar",
        meta_problem: "foo"
    });

    var arr = smsparser.parseArray(def, doc);
    test.same(
        arr,
        ["12-11-11 15:00", "+15551212", "Bar", "foo"]
    );

    test.done();
};
示例#29
0
exports['smsformats structured but no form'] = function(test) {

    var docs = [
        {message: "1!0000!1"},
        {message: "0000 ABC 123-123-123"}
    ];

    for (var i in docs) {
        var doc = docs[i],
            form = smsparser.getFormCode(doc.message),
            def = utils.info.getForm(form);
        // assert parsing fails
        test.same({}, smsparser.parse(def, doc));
    }

    test.done();
};
exports['compact textforms format'] = function(test) {
    var doc = {
        sent_timestamp: '1-13-12 15:35',
        from: '+15551212',
        message: 'ANCR sarah 24 2012-03-12'
    };

    var expectedObj = {
        name: 'sarah',
        lmp: 24,
        somedate: 1331510400000
    };

    var obj = smsparser.parse(def, doc);
    test.same(obj, expectedObj);
    test.done();
};