tbr 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,4 @@
1
+ DS,4833936100,20130418,P7978266009,797,3,
2
+ TC,00002, 0,Directory charges,,00,
3
+ TC,00003, 0,Flexi-plan discounts,,65,
4
+ TC,C5421, 23,National Direct Dialled calls,MobileNet,11,
File without changes
@@ -0,0 +1 @@
1
+ invalid services file
File without changes
@@ -0,0 +1,14 @@
1
+ 0353321261,Adrian,105 Dana St Office ISDN2,,,ISDN 2,,,
2
+ 0353321492,Adrian,105 Dana St Office ISDN2,,,ISDN 2,,,
3
+ 0353321676,Adrian,105 Dana St Office ISDN2,,,ISDN 2,,,
4
+ 0353321689,Adrian,105 Dana St Office ISDN2,,,ISDN 2,,,
5
+ 0353321286,Adrian,105 Dana St Office ISDN2. Main number.,,,ISDN 2,,,
6
+ 0353321055,Adrian,105 Dana St: Fax,,,Fax/FaxStream,,,
7
+ 0418133125,Cliff,Cliff Barclay,,4.99,MobileNet,,,
8
+ 0428959211,Cliff,Cliff Barclay: iPad,,4.99 + 3gb @ 39.00,MobileNet,Has a $39-3GB datapack. Price for data pack seems wrong.,,
9
+ 0353335856,Unknown,105 Dana St. Extension of 03 5332 1286. Redirecting from 1300792273.,,,Telephone,Maybe suspend. Used for 1300 number.,,
10
+ 0353344129,Unknown,121 Albert St: Unknown Fax Line,,,Telephone,,,
11
+ 0353392988,Unknown,15 Violet Grove. Wendouree: Unknown Phone,,,Telephone,,,
12
+ 0398763692,Unknown,5 Dalry Avenue. Orchards. Listed as Mars Confectionary.,,Unknown. No calls Nov 2012. ,Telephone,Block and cancel if no issues.,,
13
+ 0353347857,Unknown,79 Mahers Road. Warrenheip. Unknown phone.,,,ISDN 2 Enhanced,Number unavailable Nov 2012.,,
14
+ 0353319583,Unknown,CENTEL. Held for call diversion to 0353348166,,,Telephone,21 calls Nov 2012. Held for call diversion to 0353348166.,,
Binary file
@@ -0,0 +1,43 @@
1
+ require_relative 'spec_helper'
2
+
3
+ NAME = 'name'
4
+ SERVICE = 'mock service'
5
+
6
+ describe Group do
7
+
8
+ let(:group) { Group.new(NAME) }
9
+
10
+ describe ".initialize" do
11
+ it "should create an empty group array" do
12
+ expect(group.size).to eq 0
13
+ end
14
+ end
15
+
16
+ describe "#add_service" do
17
+ it "should add a service" do
18
+ group.add_service(SERVICE)
19
+ expect(group.size).to eq 1
20
+ end
21
+ end
22
+
23
+ describe "#name" do
24
+ it "should return initial name" do
25
+ expect(group.name).to eq NAME
26
+ end
27
+
28
+ it "shouldn't set name" do
29
+ expect { group.name = 'new name' }.to raise_error NoMethodError
30
+ end
31
+ end
32
+
33
+ describe "#each" do
34
+ it "should return two groups" do
35
+ count = 0
36
+ group.add_service(SERVICE)
37
+ group.add_service(SERVICE)
38
+ group.each { count += 1}
39
+ expect(count).to eq 2
40
+ end
41
+ end
42
+
43
+ end
@@ -0,0 +1,59 @@
1
+ require_relative 'spec_helper'
2
+
3
+ describe Groups do
4
+
5
+ let(:groups) { Groups.new }
6
+
7
+ before :each do
8
+ groups.group ONE
9
+ groups.group TWO
10
+ end
11
+
12
+ describe "#size" do
13
+ it "should contain two groups" do
14
+ expect(groups.size).to eq 2
15
+ end
16
+ end
17
+
18
+ describe "#group" do
19
+ it "should return a Service" do
20
+ group = groups.group ONE
21
+ expect(group.class).to eq Group
22
+ end
23
+
24
+ context "no group number" do
25
+ it "shouldn't add nil group number" do
26
+ groups.group(nil)
27
+ expect(groups.size).to eq 2
28
+ end
29
+
30
+ it "shouldn't add empty group number" do
31
+ groups.group('')
32
+ expect(groups.size).to eq 2
33
+ end
34
+ end
35
+
36
+ context "pre-existing group number" do
37
+ it "shouldn't add a group" do
38
+ groups.group ONE
39
+ expect(groups.size).to eq 2
40
+ end
41
+ end
42
+
43
+ context "new group number" do
44
+ it "should add a group" do
45
+ groups.group THREE
46
+ expect(groups.size).to eq 3
47
+ end
48
+ end
49
+ end
50
+
51
+ describe "#each" do
52
+ it "should return two groups" do
53
+ count = 0
54
+ groups.each { count += 1}
55
+ expect(count).to eq 2
56
+ end
57
+ end
58
+
59
+ end
@@ -0,0 +1,86 @@
1
+ describe ParseFiles do
2
+
3
+ let(:service_list) { ParseFiles.parse_services_file(SERVICES) }
4
+ let(:services) { Services.new }
5
+ let(:groups) { Groups.new }
6
+
7
+ describe '.parse_services_file' do
8
+ context "valid services file" do
9
+ it "should return an array with fourteen elements" do
10
+ expect(service_list.size).to eq 14
11
+ end
12
+
13
+ it "should contain something" do
14
+ fields = service_list[10]
15
+ expect(fields[0]).to eq '0353392988'
16
+ expect(fields[1]).to eq 'Unknown'
17
+ expect(fields[2]).to start_with '15 Violet Grove'
18
+ expect(fields[3]).to be nil
19
+ end
20
+ end
21
+
22
+ context "empty services file" do
23
+ it "should return an empty array" do
24
+ expect(ParseFiles.parse_services_file(EMPTY)).to be_empty
25
+ end
26
+ end
27
+
28
+ context "invalid services file" do
29
+ it "should return an empty array" do
30
+ expect(ParseFiles.parse_services_file(INVALID)).to be_empty
31
+ end
32
+ end
33
+
34
+ context "missing services file" do
35
+ it "should throw an exception" do
36
+ expect { ParseFiles.parse_services_file(MISSING) }.to raise_error IOError
37
+ end
38
+ end
39
+ end
40
+
41
+ describe ".map_services" do
42
+ before :each do
43
+ ParseFiles.map_services(groups,services,service_list)
44
+ end
45
+
46
+ it "should create 3 groups" do
47
+ expect(groups.size).to eq 3
48
+ end
49
+
50
+ it "should create 14 services" do
51
+ expect(services.size).to eq 14
52
+ end
53
+ end
54
+
55
+ describe ".parse_bill_file" do
56
+ let(:call_type) { CallType.new }
57
+
58
+ before :each do
59
+ call_type.load(CALL_TYPES)
60
+ @invoice_date = ParseFiles.parse_bill_file(services,call_type,BILLS)
61
+ end
62
+
63
+ it "returns invoice date" do
64
+ expect(@invoice_date).to eq '20130619'
65
+ end
66
+
67
+ it "collates services" do
68
+ service = services.service('0418133125')
69
+ expect(service.service_summaries.size).to eq 8
70
+ expect(service.call_details.size).to eq 147
71
+ end
72
+
73
+ context "missing bill file" do
74
+ it "should throw an exception" do
75
+ expect { ParseFiles.parse_bill_file(services,call_type,MISSING) }.to raise_error IOError
76
+ end
77
+ end
78
+
79
+ context "invalid bill file" do
80
+ it "should throw an exception" do
81
+ expect { ParseFiles.parse_bill_file(services,call_type,INVALID) }.to raise_error ArgumentError
82
+ end
83
+ end
84
+ end
85
+
86
+ end
@@ -0,0 +1,129 @@
1
+ require_relative 'spec_helper'
2
+
3
+ LOG_FILE = '/tmp/tbrlogfile'
4
+ PDF_DIR = '/tmp/201306'
5
+
6
+ describe Tbr::Processor do
7
+
8
+ let(:tbr) { Tbr::Processor.new }
9
+
10
+ before :each do
11
+ FileUtils.rm_f(LOG_FILE)
12
+ Tbr.log = Logger.new(LOG_FILE)
13
+ end
14
+
15
+ describe "#initialize" do
16
+ it "should set logo to default" do
17
+ expect(tbr.logo).to include 'lib/tbr/../logo.jpg'
18
+ end
19
+
20
+ it "should set replace to false" do
21
+ expect(tbr.replace).to be_falsy
22
+ end
23
+
24
+ it "should set services to an empty array" do
25
+ expect(tbr.services).to eq []
26
+ end
27
+ end
28
+
29
+ describe ".import_services" do
30
+ it "should import data in tbr.services" do
31
+ tbr.import_services(SERVICES)
32
+ expect(tbr.services.count).to eq 14
33
+ end
34
+ end
35
+
36
+ describe ".logo=" do
37
+ it "should use default logo if argument is nil" do
38
+ tbr.logo = nil
39
+ expect(tbr.logo).to end_with 'lib/tbr/../logo.jpg'
40
+ end
41
+
42
+ it "should use a logo with a valid path" do
43
+ tbr.logo = './spec/data/test_logo.jpg'
44
+ expect(tbr.logo).to eq './spec/data/test_logo.jpg'
45
+ end
46
+
47
+ it "should use default logo if path is invalid and write log entry" do
48
+ tbr.logo = './spec/data/missing_logo.jpg'
49
+ expect(tbr.logo).to end_with 'lib/tbr/../logo.jpg'
50
+ expect(check_log('could not be found')).to be_truthy
51
+ end
52
+ end
53
+
54
+ describe ".output=" do
55
+ it "should output to /tmp if argument is nil" do
56
+ tbr.output = nil
57
+ expect(tbr.output).to eq '/tmp'
58
+ end
59
+
60
+ it "should output to supplied directory if directory exists" do
61
+ tbr.output = OUT_DIR
62
+ expect(tbr.output).to eq OUT_DIR
63
+ end
64
+
65
+ it "should output to /tmp if output directory doesn't exist" do
66
+ tbr.output = "#{OUT_DIR}/missing"
67
+ expect(tbr.output).to eq '/tmp'
68
+ expect(check_log('No output directory')).to be_truthy
69
+ end
70
+ end
71
+
72
+ describe ".services=" do
73
+ it "should set services to a valid array" do
74
+ tbr.services = [1,2,3]
75
+ expect(tbr.services).to eq [1,2,3]
76
+ end
77
+
78
+ it "should raise an ArgumentError when service isn't an array" do
79
+ expect { tbr.services = 'error' }.to raise_error ArgumentError
80
+ end
81
+ end
82
+
83
+ describe ".process" do
84
+ it "raises an ArgumentError if argument is not a string" do
85
+ expect { tbr.process(nil) }.to raise_error ArgumentError
86
+ end
87
+
88
+ it "raises an IOError if input file not found" do
89
+ expect { tbr.process(MISSING) }.to raise_error IOError
90
+ end
91
+ end
92
+
93
+ describe ".process - writing output", pdf: true do
94
+ before :each do
95
+ FileUtils.rm_rf(PDF_DIR)
96
+ tbr.output = '/tmp'
97
+ end
98
+
99
+ it "writes to output if directory is valid" do
100
+ tbr.process(BILLS)
101
+ expect(Dir.exist?(PDF_DIR)).to be_truthy
102
+ expect(Dir.glob("#{PDF_DIR}/summaries/*").count).to eq 1
103
+ expect(Dir.glob("#{PDF_DIR}/details/*").count).to eq 16
104
+ expect(check_log('Empty services list')).to be_truthy
105
+ expect(check_log('completed')).to be_truthy
106
+ end
107
+
108
+ it "creates summaries" do
109
+ tbr.services = [['0353319583','Adrian','105 Dana Street','103']]
110
+ tbr.process(BILLS)
111
+ expect(Dir.glob("#{PDF_DIR}/summaries/*").count).to eq 2
112
+ expect(check_log('Empty services list')).to be_falsy
113
+ expect(check_log('completed')).to be_truthy
114
+ end
115
+ end
116
+
117
+ private
118
+
119
+ def check_log(sub)
120
+ begin
121
+ File.open(LOG_FILE).each do |line|
122
+ return true if line.include?(sub)
123
+ end
124
+ return false
125
+ rescue Errno::ENOENT
126
+ return false
127
+ end
128
+ end
129
+ end
@@ -0,0 +1,103 @@
1
+ require_relative 'spec_helper'
2
+
3
+ describe Service do
4
+
5
+ let(:service) { Service.new(TEST_PHONE,'Brian Collins','1000') }
6
+ let(:call_type) { CallType.new }
7
+
8
+ before :each do
9
+ call_type.load(CALL_TYPES)
10
+ end
11
+
12
+ describe ".initialize" do
13
+ it "should set service_summaries to empty array" do
14
+ expect(service.service_summaries).to eq []
15
+ end
16
+
17
+ it "should set call_details to empty array" do
18
+ expect(service.call_details).to eq []
19
+ end
20
+
21
+ it "should have a zero total" do
22
+ expect(service.total).to eq 0.0
23
+ end
24
+ end
25
+
26
+ describe "#service_number" do
27
+ it "should initialise service_number" do
28
+ expect(service.service_number).to eq TEST_PHONE
29
+ end
30
+
31
+ it "shouldn't set service_number" do
32
+ expect { service.service_number = '1234' }.to raise_error NoMethodError
33
+ end
34
+ end
35
+
36
+ describe "#name" do
37
+ it "should initialise name" do
38
+ expect(service.name).to eq 'Brian Collins'
39
+ end
40
+
41
+ it "should set provided name" do
42
+ service.name = 'New Name'
43
+ expect(service.name).to eq 'New Name'
44
+ end
45
+
46
+ it "should set default name" do
47
+ service.name = nil
48
+ expect(service.name).to eq 'Unassigned'
49
+ end
50
+ end
51
+
52
+ describe "#cost_centre" do
53
+ it "should initialise cost_centre" do
54
+ expect(service.cost_centre).to eq '1000'
55
+ end
56
+
57
+ it "should set provided cost_centre" do
58
+ service.cost_centre = '1234'
59
+ expect(service.cost_centre).to eq '1234'
60
+ end
61
+
62
+ it "should set default cost_centre" do
63
+ service.cost_centre = nil
64
+ expect(service.cost_centre).to eq ''
65
+ end
66
+ end
67
+
68
+ describe "#add_service_summary" do
69
+ it "should add a service" do
70
+ service.add_service_summary(nil)
71
+ expect(service.service_summaries.size).to eq 1
72
+ end
73
+ end
74
+
75
+ describe "#add_call_detail" do
76
+ it "should add a call_detail" do
77
+ service.add_call_detail(nil)
78
+ expect(service.call_details.size).to eq 1
79
+ end
80
+ end
81
+
82
+ describe "#total" do
83
+ it "returns a total" do
84
+ service_summary = double('ServiceSummary', cost: 12.34)
85
+ service.add_service_summary(service_summary)
86
+ expect(service.total).to eq 12.34
87
+ end
88
+ end
89
+
90
+ describe "#service_number_format" do
91
+ context "phone number" do
92
+ it "should format as phone number" do
93
+ expect(service.service_number_format).to eq "04 1850 1461"
94
+ end
95
+ end
96
+
97
+ context "non-phone service" do
98
+ it "shouldn't format the service number" do
99
+ expect(Service.new('TEST',nil,nil).service_number_format).to eq 'TEST'
100
+ end
101
+ end
102
+ end
103
+ end