summaryrefslogtreecommitdiff
path: root/test/test.js
blob: c31f179d3b3d7c32c412a192e4bccf2c61ba9cdc (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
'use strict';

var mocha = require('mocha');
var describe = mocha.describe;
var it = mocha.it;
var expect = require('chai').expect;
var saIdParser = require('../south-african-id-parser.js');

describe('South African ID Number Parsing', function () {
  var validIdNumbers = [{
    idNumber: '9001049818080',
    dateOfBirth: new Date(1990, 0, 4),
    isMale: true,
    isFemale: false,
    isSouthAfricanCitizen: true
  }, {
    idNumber: '1012311412187',
    dateOfBirth: new Date(2010, 11, 31),
    isMale: false,
    isFemale: true,
    isSouthAfricanCitizen: false
  }];
  var invalidIdNumbers = [{
    idNumber: '9001049881080' //invalid check digit
  }, {
    idNumber: '9002302419087' //invalid date
  }, {
    idNumber: '9001049881a83' //has a character in there
  }, {
    idNumber: '90010498813' //wrong length
  }];

  it('should correctly validate valid ID numbers', function() {
    validIdNumbers.forEach(function(validIdNumber) {
      expect(saIdParser.validate(validIdNumber.idNumber)).to.equal(true);
    });
  });
  it('should correctly validate invalid ID numbers', function() {
    invalidIdNumbers.forEach(function(invalidIdNumber) {
      expect(saIdParser.validate(invalidIdNumber.idNumber)).to.equal(false);
    });
  });

  it('should parse valid date of birth correctly', function() {
    validIdNumbers.forEach(function(validIdNumber) {
      var parsedDate = saIdParser.parseDateOfBirth(validIdNumber.idNumber);
      var expectedDate = validIdNumber.dateOfBirth;
      expect(parsedDate.getTime()).to.equal(expectedDate.getTime());
    });
  });
  it ('should parse valid gender correctly', function() {
    validIdNumbers.forEach(function(validIdNumber) {
      expect(saIdParser.parseIsMale(validIdNumber.idNumber))
        .to.equal(validIdNumber.isMale);
      expect(saIdParser.parseIsFemale(validIdNumber.idNumber))
        .to.equal(validIdNumber.isFemale);
    });
  });
  it ('should parse valid citizenship correctly', function() {
    validIdNumbers.forEach(function(validIdNumber) {
      expect(saIdParser.parseIsSouthAfricanCitizen(validIdNumber.idNumber))
        .to.equal(validIdNumber.isSouthAfricanCitizen);
    });
  });

  it('should correctly parse valid ID numbers', function() {
    validIdNumbers.forEach(function(validIdNumber) {
      var info = saIdParser.parse(validIdNumber.idNumber);
      expect(info.isValid).to.equal(true);
      expect(info.dateOfBirth.getTime()).to.equal(validIdNumber.dateOfBirth.getTime());
      expect(info.isMale).to.equal(validIdNumber.isMale);
      expect(info.isFemale).to.equal(validIdNumber.isFemale);
      expect(info.isSouthAfricanCitizen).to.equal(validIdNumber.isSouthAfricanCitizen);
    });
  });

  it('should correctly parse invalid ID numbers', function() {
    invalidIdNumbers.forEach(function(invalidIdNumber) {
      var info = saIdParser.parse(invalidIdNumber.idNumber);
      expect(info).to.deep.equal({isValid: false});
    });
  });
});