aemo 0.1.33 → 0.1.34
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.
- checksums.yaml +4 -4
- data/lib/aemo.rb +1 -0
- data/lib/aemo/market/interval.rb +2 -0
- data/lib/aemo/market/node.rb +41 -0
- data/lib/aemo/nmi.rb +0 -1
- data/lib/aemo/region.rb +36 -14
- data/lib/aemo/version.rb +1 -1
- data/lib/data/{tni-mlf-codes.csv → TNI-MLF-Codes.csv} +0 -0
- data/lib/data/xml_to_json.rb +4 -4
- data/spec/lib/aemo/market/interval_spec.rb +1 -1
- data/spec/lib/aemo/market/node_spec.rb +33 -0
- data/spec/lib/aemo/msats_spec.rb +117 -44
- data/spec/lib/aemo/nem12_spec.rb +3 -3
- data/spec/lib/aemo/nmi_spec.rb +16 -1
- data/spec/spec_helper.rb +20 -3
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 74f32714f901733d865a3c9f609962579fa45db7
|
4
|
+
data.tar.gz: 3f5edd9c91603c6543454cd93fc73451c7af6044
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 99c6bd09338c5831c957cdce5e99aa77079c9c6adfba2c665b76757fed635edfc57a3546804ac0c6481b849c6362da3f3b48ad0a0f4a964b83188f579a2d29a7
|
7
|
+
data.tar.gz: cf82786f4c1c29910127a3710e87e045ad1d0f95310ad7b6e8110e2e733f9e138f8de6194c6cd116469ef30ddffca6176295071811e02f10644897969586ad58
|
data/lib/aemo.rb
CHANGED
data/lib/aemo/market/interval.rb
CHANGED
@@ -0,0 +1,41 @@
|
|
1
|
+
module AEMO
|
2
|
+
module Market
|
3
|
+
# AEMO::Market::Interval
|
4
|
+
#
|
5
|
+
# @author Joel Courtney
|
6
|
+
# @abstract
|
7
|
+
# @since 0.1.0
|
8
|
+
class Node
|
9
|
+
IDENTIFIERS = %w(NSW QLD SA TAS VIC)
|
10
|
+
|
11
|
+
attr_accessor :identifier
|
12
|
+
|
13
|
+
def initialize(identifier)
|
14
|
+
raise ArgumentError, "Node Identifier '#{identifier}' is not valid." unless IDENTIFIERS.include?(identifier.upcase)
|
15
|
+
@identifier = identifier
|
16
|
+
@current_trading = []
|
17
|
+
@current_dispatch = []
|
18
|
+
end
|
19
|
+
|
20
|
+
# Return the current dispatch data
|
21
|
+
#
|
22
|
+
# @return [Array<AEMO::Market::Interval>]
|
23
|
+
def current_dispatch
|
24
|
+
if @current_dispatch.empty? || @current_dispatch.last.datetime != (Time.now - Time.now.to_i % 300)
|
25
|
+
@current_dispatch = AEMO::Market.current_dispatch(@identifier)
|
26
|
+
end
|
27
|
+
@current_dispatch
|
28
|
+
end
|
29
|
+
|
30
|
+
# Return the current trading data
|
31
|
+
#
|
32
|
+
# @return [Array<AEMO::Market::Interval>]
|
33
|
+
def current_trading
|
34
|
+
if @current_trading.empty? || @current_trading.reject { |i| i.period_type != 'TRADE' }.last.datetime != (Time.now - Time.now.to_i % 300)
|
35
|
+
@current_trading = AEMO::Market.current_trading(@identifier)
|
36
|
+
end
|
37
|
+
@current_trading
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
data/lib/aemo/nmi.rb
CHANGED
@@ -712,7 +712,6 @@ module AEMO
|
|
712
712
|
raise 'start cannot be after finish' if start > finish
|
713
713
|
possible_values = TNI_CODES[@tni]
|
714
714
|
.reject { |x| start > DateTime.parse(x['ToDate']) || finish < DateTime.parse(x['FromDate']) }
|
715
|
-
.reject { |x| start > DateTime.parse(x['finish']) || finish < DateTime.parse(x['start']) }
|
716
715
|
return nil if possible_values.empty?
|
717
716
|
possible_values.map { |x| x['mlf_data']['loss_factors'] }
|
718
717
|
end
|
data/lib/aemo/region.rb
CHANGED
@@ -18,48 +18,70 @@ module AEMO
|
|
18
18
|
}.freeze
|
19
19
|
|
20
20
|
attr_accessor :region
|
21
|
+
attr_reader :aemo_market_node
|
21
22
|
|
23
|
+
class << self
|
24
|
+
def all
|
25
|
+
REGIONS.keys.map { |k| AEMO::Region.new(k) }
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
# Create a new instance of AEMO::Region
|
30
|
+
#
|
31
|
+
# @param [String] region State
|
32
|
+
# @return [self]
|
22
33
|
def initialize(region)
|
23
34
|
raise ArgumentError, "Region '#{region}' is not valid." unless valid_region?(region)
|
24
|
-
@region = region
|
35
|
+
@region = region.upcase
|
36
|
+
@full_name = REGIONS[@region]
|
25
37
|
@current_trading = []
|
26
38
|
@current_dispatch = []
|
39
|
+
@aemo_market_node = if %w(NSW QLD SA TAS VIC).include?(@region)
|
40
|
+
AEMO::Market::Node.new(region)
|
41
|
+
elsif @region == 'ACT'
|
42
|
+
AEMO::Market::Node.new('NSW')
|
43
|
+
end
|
27
44
|
end
|
28
45
|
|
46
|
+
# Abbreviation method
|
47
|
+
#
|
48
|
+
# @return [String]
|
29
49
|
def abbr
|
30
50
|
@region
|
31
51
|
end
|
32
52
|
|
53
|
+
# @return [String]
|
33
54
|
def to_s
|
34
55
|
@region
|
35
56
|
end
|
36
57
|
|
58
|
+
# @return [String]
|
37
59
|
def fullname
|
38
60
|
REGIONS[@region]
|
39
61
|
end
|
40
62
|
|
63
|
+
# Return the current dispatch data
|
64
|
+
#
|
65
|
+
# @return [Array<AEMO::Market::Interval>]
|
41
66
|
def current_dispatch
|
42
|
-
|
43
|
-
@current_dispatch = AEMO::Market.current_dispatch(@region)
|
44
|
-
end
|
45
|
-
@current_dispatch
|
67
|
+
@aemo_market_node.current_dispatch
|
46
68
|
end
|
47
69
|
|
70
|
+
# Return the current trading data
|
71
|
+
#
|
72
|
+
# @return [Array<AEMO::Market::Interval>]
|
48
73
|
def current_trading
|
49
|
-
|
50
|
-
@current_trading = AEMO::Market.current_trading(@region)
|
51
|
-
end
|
52
|
-
@current_trading
|
53
|
-
end
|
54
|
-
|
55
|
-
def self.all
|
56
|
-
REGIONS.keys.map { |k| AEMO::Region.new(k) }
|
74
|
+
@aemo_market_node.current_trading
|
57
75
|
end
|
58
76
|
|
59
77
|
protected
|
60
78
|
|
79
|
+
# Validates a region
|
80
|
+
#
|
81
|
+
# @param [String] region
|
82
|
+
# @return [Boolean]
|
61
83
|
def valid_region?(region)
|
62
|
-
REGIONS.keys.include?(region)
|
84
|
+
REGIONS.keys.include?(region.upcase)
|
63
85
|
end
|
64
86
|
end
|
65
87
|
end
|
data/lib/aemo/version.rb
CHANGED
@@ -22,7 +22,7 @@
|
|
22
22
|
# @author Joel Courtney <euphemize@gmail.com>
|
23
23
|
module AEMO
|
24
24
|
# aemo version
|
25
|
-
VERSION = '0.1.
|
25
|
+
VERSION = '0.1.34'.freeze
|
26
26
|
|
27
27
|
# aemo version split amongst different revisions
|
28
28
|
MAJOR_VERSION, MINOR_VERSION, REVISION = VERSION.split('.').map(&:to_i)
|
File without changes
|
data/lib/data/xml_to_json.rb
CHANGED
@@ -15,10 +15,10 @@ require 'active_support/all'
|
|
15
15
|
file_contents = File.read(File.join(@path, 'tni-mlf-codes.csv')).encode('UTF-8', 'binary', invalid: :replace, undef: :replace, replace: '')
|
16
16
|
CSV.parse(file_contents, headers: true, converters: :numeric).each do |row|
|
17
17
|
@mlf_data[row['TNI']] ||= { location: row['Location'], voltage: row['Voltage'], loss_factors: [] }
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
18
|
+
row.headers.select{|x| x =~ %r{^FY\d{2}$}}.sort.reverse.each do |fin_year|
|
19
|
+
year = "20#{fin_year.match(/FY(\d{2})/)[1]}".to_i
|
20
|
+
@mlf_data[row['TNI']][:loss_factors] << { start: DateTime.parse("#{year - 1}-07-01T00:00:00+1000"), finish: DateTime.parse("#{year}-07-01T00:00:00+1000"), value: row[fin_year] }
|
21
|
+
end
|
22
22
|
end
|
23
23
|
|
24
24
|
# TNI to MLF
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe AEMO::Market::Interval do
|
4
|
-
describe 'AEMO::Market::Interval
|
4
|
+
describe 'AEMO::Market::Interval constants' do
|
5
5
|
it 'has INTERVALS' do
|
6
6
|
expect(AEMO::Market::Interval::INTERVALS).to eq(trading: 'Trading', dispatch: 'Dispatch')
|
7
7
|
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe AEMO::Market::Node do
|
4
|
+
describe '.IDENTIFIERS' do
|
5
|
+
it 'should be an array' do
|
6
|
+
expect(AEMO::Market::Node::IDENTIFIERS).to be_instance_of(Array)
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
describe 'creating a node' do
|
11
|
+
it 'should raise an error if invalid region' do
|
12
|
+
expect { AEMO::Market::Node.new('BOTTOMS') }.to raise_error(ArgumentError)
|
13
|
+
end
|
14
|
+
it 'should create if node valid' do
|
15
|
+
expect { AEMO::Market::Node.new('NSW') }.not_to raise_error
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe 'AEMO::Region instance methods' do
|
20
|
+
before(:each) do
|
21
|
+
@nsw = AEMO::Market::Node.new('NSW')
|
22
|
+
end
|
23
|
+
|
24
|
+
describe 'AEMO::Region dispatch information' do
|
25
|
+
it 'should return current dispatch data' do
|
26
|
+
expect(@nsw.current_dispatch.count).to eq(AEMO::Market.current_dispatch(@nsw.identifier).count)
|
27
|
+
end
|
28
|
+
it 'should return current trading data' do
|
29
|
+
expect(@nsw.current_trading.count).to eq(AEMO::Market.current_trading(@nsw.identifier).count)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
data/spec/lib/aemo/msats_spec.rb
CHANGED
@@ -9,74 +9,147 @@ describe AEMO::MSATS do
|
|
9
9
|
|
10
10
|
describe 'class methods' do
|
11
11
|
describe 'nmi details' do
|
12
|
-
|
13
|
-
|
14
|
-
|
12
|
+
describe 'valid MSATS user' do
|
13
|
+
before(:each) do
|
14
|
+
AEMO::MSATS.authorize('ER', 'ER', 'ER')
|
15
|
+
end
|
15
16
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
17
|
+
it 'should get data for a valid nmi' do
|
18
|
+
nmi_detail_query = AEMO::MSATS.nmi_detail('4001234567')
|
19
|
+
expect(nmi_detail_query.class).to eq(Hash)
|
20
|
+
end
|
21
|
+
it 'should get a 404 for a nonexistent nmi' do
|
22
|
+
# nmi_detail_query = AEMO::MSATS.nmi_detail('4001234566')
|
23
|
+
# TODO workout what the different errors are here...
|
24
|
+
end
|
25
|
+
it 'should raise an error for a bad nmi' do
|
26
|
+
expect { AEMO::MSATS.nmi_detail('BOBISAFISH') }.to raise_error(ArgumentError)
|
27
|
+
end
|
23
28
|
end
|
24
|
-
|
25
|
-
|
29
|
+
|
30
|
+
describe 'invalid MSATS user' do
|
31
|
+
before(:each) do
|
32
|
+
AEMO::MSATS.authorize('NOTER', 'NOTER', 'NOTER')
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'should get data for a valid nmi' do
|
36
|
+
nmi_detail_query = AEMO::MSATS.nmi_detail('4001234567')
|
37
|
+
expect(nmi_detail_query.class).to eq(HTTParty::Response)
|
38
|
+
end
|
26
39
|
end
|
27
40
|
end
|
28
41
|
|
29
42
|
describe '#c4' do
|
30
|
-
|
31
|
-
|
32
|
-
|
43
|
+
describe 'valid MSATS account' do
|
44
|
+
before(:each) do
|
45
|
+
AEMO::MSATS.authorize('ER', 'ER', 'ER')
|
46
|
+
end
|
33
47
|
|
34
|
-
|
35
|
-
|
48
|
+
it 'should return a hash of information' do
|
49
|
+
expect(AEMO::MSATS.c4('4001234567', DateTime.now, DateTime.now, DateTime.now)).to be_a(Hash)
|
50
|
+
end
|
51
|
+
it 'should raise an error for a bad nmi' do
|
52
|
+
expect { AEMO::MSATS.c4('BOBISAFISH') }.to raise_error(ArgumentError)
|
53
|
+
end
|
54
|
+
it 'should return a hash of information' do
|
55
|
+
# AEMO::MSATS.c4('4001234566', DateTime.now, DateTime.now, DateTime.now)
|
56
|
+
# TODO workout what the different errors are here...
|
57
|
+
end
|
36
58
|
end
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
59
|
+
|
60
|
+
describe 'invalid MSATS account' do
|
61
|
+
before(:each) do
|
62
|
+
AEMO::MSATS.authorize('NOTER', 'NOTER', 'NOTER')
|
63
|
+
end
|
64
|
+
|
65
|
+
it 'should return response' do
|
66
|
+
expect(AEMO::MSATS.c4(
|
67
|
+
'4001234567',
|
68
|
+
DateTime.now,
|
69
|
+
DateTime.now,
|
70
|
+
DateTime.now
|
71
|
+
).class).to eq(HTTParty::Response)
|
72
|
+
end
|
43
73
|
end
|
44
74
|
end
|
45
75
|
|
46
76
|
describe '#msats_limits' do
|
47
|
-
|
48
|
-
|
77
|
+
describe 'valid MSATS user' do
|
78
|
+
before(:each) do
|
79
|
+
AEMO::MSATS.authorize('ER', 'ER', 'ER')
|
80
|
+
end
|
81
|
+
|
82
|
+
it 'should give details of msats_limits' do
|
83
|
+
expect(AEMO::MSATS.msats_limits.class).to eq(Hash)
|
84
|
+
end
|
49
85
|
end
|
50
86
|
|
51
|
-
|
52
|
-
|
87
|
+
describe 'invalid MSATS user' do
|
88
|
+
before(:each) do
|
89
|
+
AEMO::MSATS.authorize('NOTER', 'NOTER', 'NOTER')
|
90
|
+
end
|
91
|
+
|
92
|
+
it 'should not give details of msats_limits' do
|
93
|
+
expect(AEMO::MSATS.msats_limits.class).to eq(HTTParty::Response)
|
94
|
+
end
|
53
95
|
end
|
54
96
|
end
|
55
97
|
|
56
98
|
describe '#nmi_discovery_by_*' do
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
99
|
+
describe 'valid MSATS user' do
|
100
|
+
before(:each) do
|
101
|
+
AEMO::MSATS.authorize('ER', 'ER', 'ER')
|
102
|
+
end
|
103
|
+
it 'should find by address' do
|
104
|
+
expect(AEMO::MSATS.nmi_discovery_by_address('NSW', house_number: 6, street_name: 'Macquarie', suburb_or_place_or_locality: 'Sydney', postcode: 2000).class).to eq(Array)
|
105
|
+
end
|
106
|
+
it 'should find by meter_serial_number' do
|
107
|
+
expect(AEMO::MSATS.nmi_discovery_by_meter_serial_number('NSW', 666).class).to eq(Array)
|
108
|
+
end
|
109
|
+
it 'should find by meter_serial_number' do
|
110
|
+
expect { AEMO::MSATS.nmi_discovery_by_delivery_point_identifier('NSW', 666) }.to raise_error(ArgumentError)
|
111
|
+
end
|
112
|
+
it 'should find by meter_serial_number' do
|
113
|
+
expect(AEMO::MSATS.nmi_discovery_by_delivery_point_identifier('NSW', 10_000_001).class).to eq(Array)
|
114
|
+
end
|
65
115
|
end
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
116
|
+
|
117
|
+
describe 'invalid MSATS user' do
|
118
|
+
before(:each) do
|
119
|
+
AEMO::MSATS.authorize('NOTER', 'NOTER', 'NOTER')
|
120
|
+
end
|
121
|
+
|
122
|
+
it 'should find by address' do
|
123
|
+
expect(AEMO::MSATS.nmi_discovery_by_address('NSW', house_number: 6, street_name: 'Macquarie', suburb_or_place_or_locality: 'Sydney', postcode: 2000).class).to eq(HTTParty::Response)
|
124
|
+
end
|
125
|
+
it 'should find by meter_serial_number' do
|
126
|
+
expect(AEMO::MSATS.nmi_discovery_by_meter_serial_number('NSW', 666).class).to eq(HTTParty::Response)
|
127
|
+
end
|
128
|
+
it 'should find by meter_serial_number' do
|
129
|
+
expect(AEMO::MSATS.nmi_discovery_by_delivery_point_identifier('NSW', 10_000_001).class).to eq(HTTParty::Response)
|
130
|
+
end
|
71
131
|
end
|
72
132
|
end
|
73
133
|
|
74
134
|
describe '#system_status' do
|
75
|
-
|
76
|
-
|
135
|
+
describe 'valid MSATS user' do
|
136
|
+
before(:each) do
|
137
|
+
AEMO::MSATS.authorize('ER', 'ER', 'ER')
|
138
|
+
end
|
139
|
+
|
140
|
+
it 'should provide a status' do
|
141
|
+
AEMO::MSATS.system_status
|
142
|
+
end
|
77
143
|
end
|
78
|
-
|
79
|
-
|
144
|
+
|
145
|
+
describe 'invalid MSATS user' do
|
146
|
+
before(:each) do
|
147
|
+
AEMO::MSATS.authorize('NOTER', 'NOTER', 'NOTER')
|
148
|
+
end
|
149
|
+
|
150
|
+
it 'should provide a status' do
|
151
|
+
expect(AEMO::MSATS.system_status.class).to eq(HTTParty::Response)
|
152
|
+
end
|
80
153
|
end
|
81
154
|
end
|
82
155
|
end
|
data/spec/lib/aemo/nem12_spec.rb
CHANGED
@@ -34,9 +34,9 @@ describe AEMO::NEM12 do
|
|
34
34
|
end
|
35
35
|
|
36
36
|
describe '#parse_nem12_200' do
|
37
|
-
before(:each) do
|
38
|
-
|
39
|
-
end
|
37
|
+
# before(:each) do
|
38
|
+
# @nem12 = AEMO::NEM12.parse_nem12_100('100,NEM12,201603010000,CNRGYMDP,NEMMCO', strict: true)
|
39
|
+
# end
|
40
40
|
end
|
41
41
|
|
42
42
|
describe '#parse_nem12_300' do
|
data/spec/lib/aemo/nmi_spec.rb
CHANGED
@@ -151,6 +151,11 @@ describe AEMO::NMI do
|
|
151
151
|
nmi.address = { number: '1', street: 'Bob', street_type: 'Street' }
|
152
152
|
expect(nmi.friendly_address).to eq('1, Bob, Street')
|
153
153
|
end
|
154
|
+
it 'should return a friendly address if the address is a nested hash' do
|
155
|
+
nmi = AEMO::NMI.new('4001234567')
|
156
|
+
nmi.address = { house: { number: '1', suffix: 'B' }, street: 'Bob', street_type: 'Street', }
|
157
|
+
expect(nmi.friendly_address).to eq('1 B, Bob, Street')
|
158
|
+
end
|
154
159
|
end
|
155
160
|
|
156
161
|
describe '#current_daily_load' do
|
@@ -163,7 +168,7 @@ describe AEMO::NMI do
|
|
163
168
|
describe '#current_annual_load' do
|
164
169
|
it 'should return zero for no data' do
|
165
170
|
@nmi = AEMO::NMI.new('4001234567')
|
166
|
-
expect(@nmi.
|
171
|
+
expect(@nmi.current_annual_load).to eq(0)
|
167
172
|
end
|
168
173
|
end
|
169
174
|
|
@@ -197,6 +202,11 @@ describe AEMO::NMI do
|
|
197
202
|
expect(@nmi.dlfc_value.class).to eq(Float)
|
198
203
|
end
|
199
204
|
end
|
205
|
+
it 'has DLF values' do
|
206
|
+
Timecop.freeze('2016-06-01T00:00:00+1000') do
|
207
|
+
expect(@nmi.dlfc_values.class).to eq(Array)
|
208
|
+
end
|
209
|
+
end
|
200
210
|
end
|
201
211
|
|
202
212
|
describe 'transmission node identifiers and loss factors' do
|
@@ -214,6 +224,11 @@ describe AEMO::NMI do
|
|
214
224
|
expect(@nmi.tni_value(DateTime.now).class).to eq(Float)
|
215
225
|
end
|
216
226
|
end
|
227
|
+
it 'has TNI values' do
|
228
|
+
Timecop.freeze('2016-06-01T00:00:00+1000') do
|
229
|
+
expect(@nmi.tni_values.class).to eq(Array)
|
230
|
+
end
|
231
|
+
end
|
217
232
|
end
|
218
233
|
|
219
234
|
describe 'MSATS functions' do
|
data/spec/spec_helper.rb
CHANGED
@@ -1,12 +1,10 @@
|
|
1
1
|
require 'coveralls'
|
2
2
|
require 'simplecov'
|
3
|
-
require 'pry'
|
4
3
|
require 'webmock/rspec'
|
4
|
+
require 'pry'
|
5
5
|
require 'timecop'
|
6
|
-
require 'aemo'
|
7
6
|
|
8
7
|
WebMock.disable_net_connect!(allow_localhost: true)
|
9
|
-
|
10
8
|
SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter.new(
|
11
9
|
[
|
12
10
|
SimpleCov::Formatter::HTMLFormatter,
|
@@ -15,6 +13,8 @@ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter.new(
|
|
15
13
|
)
|
16
14
|
SimpleCov.start
|
17
15
|
|
16
|
+
require 'aemo'
|
17
|
+
|
18
18
|
RSpec.configure do |config|
|
19
19
|
# WebMock
|
20
20
|
config.before(:each) do
|
@@ -52,6 +52,23 @@ RSpec.configure do |config|
|
|
52
52
|
.with(headers: { 'Accept' => 'text/xml', 'Content-Type' => 'text/xml' })
|
53
53
|
.to_return(status: 200, body: File.new('spec/fixtures/MSATS/participant_system_status.xml'), headers: xml_headers)
|
54
54
|
# MSATS ERRORS
|
55
|
+
# Invalid MSATS User
|
56
|
+
stub_request(:get, %r{msats.prod.nemnet.net.au\/msats\/ws\/C4\/NOTER})
|
57
|
+
.with(headers: { 'Accept' => ['text/xml'], 'Content-Type' => 'text/xml' })
|
58
|
+
.to_return(status: 404, body: '', headers: xml_headers)
|
59
|
+
stub_request(:get, %r{msats.prod.nemnet.net.au\/msats\/ws\/MSATSLimits\/NOTER})
|
60
|
+
.with(headers: { 'Accept' => ['text/xml'], 'Content-Type' => 'text/xml' })
|
61
|
+
.to_return(status: 404, body: '', headers: xml_headers)
|
62
|
+
stub_request(:get, %r{msats.prod.nemnet.net.au\/msats\/ws\/NMIDetail\/NOTER})
|
63
|
+
.with(headers: { 'Accept' => ['text/xml'], 'Content-Type' => 'text/xml' })
|
64
|
+
.to_return(status: 404, body: '', headers: xml_headers)
|
65
|
+
stub_request(:get, %r{msats.prod.nemnet.net.au\/msats\/ws\/NMIDiscovery\/NOTER})
|
66
|
+
.with(headers: { 'Accept' => ['text/xml'], 'Content-Type' => 'text/xml' })
|
67
|
+
.to_return(status: 404, body: '', headers: xml_headers)
|
68
|
+
stub_request(:get, %r{msats.prod.nemnet.net.au\/msats\/ws\/ParticipantSystemStatus\/NOTER})
|
69
|
+
.with(headers: { 'Accept' => 'text/xml', 'Content-Type' => 'text/xml' })
|
70
|
+
.to_return(status: 404, body: '', headers: xml_headers)
|
71
|
+
# Data errors
|
55
72
|
stub_request(:get, %r{msats.prod.nemnet.net.au\/msats\/ws\/C4\/ER\?.+?NMI=4001234566.+?})
|
56
73
|
.with(headers: { 'Accept' => ['text/xml'], 'Content-Type' => 'text/xml' })
|
57
74
|
.to_return(status: 404, body: '', headers: xml_headers)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: aemo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.34
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Joel Courtney
|
@@ -420,18 +420,19 @@ files:
|
|
420
420
|
- lib/aemo/dispatchable.rb
|
421
421
|
- lib/aemo/market.rb
|
422
422
|
- lib/aemo/market/interval.rb
|
423
|
+
- lib/aemo/market/node.rb
|
423
424
|
- lib/aemo/msats.rb
|
424
425
|
- lib/aemo/nem12.rb
|
425
426
|
- lib/aemo/nem13.rb
|
426
427
|
- lib/aemo/nmi.rb
|
427
428
|
- lib/aemo/region.rb
|
428
429
|
- lib/aemo/version.rb
|
430
|
+
- lib/data/TNI-MLF-Codes.csv
|
429
431
|
- lib/data/aemo-dlf-dnsp.csv
|
430
432
|
- lib/data/aemo-dlf.json
|
431
433
|
- lib/data/aemo-dlf.xml
|
432
434
|
- lib/data/aemo-tni.json
|
433
435
|
- lib/data/aemo-tni.xml
|
434
|
-
- lib/data/tni-mlf-codes.csv
|
435
436
|
- lib/data/xml_to_json.rb
|
436
437
|
- spec/aemo_spec.rb
|
437
438
|
- spec/fixtures/MSATS/c4.xml
|
@@ -545,6 +546,7 @@ files:
|
|
545
546
|
- spec/fixtures/NEM12/nem12#SCENARIO10NEM1210183#ELECTDSM#NEMMCO
|
546
547
|
- spec/fixtures/nmi_checksum.json
|
547
548
|
- spec/lib/aemo/market/interval_spec.rb
|
549
|
+
- spec/lib/aemo/market/node_spec.rb
|
548
550
|
- spec/lib/aemo/market_spec.rb
|
549
551
|
- spec/lib/aemo/msats_spec.rb
|
550
552
|
- spec/lib/aemo/nem12_spec.rb
|
@@ -689,6 +691,7 @@ test_files:
|
|
689
691
|
- spec/fixtures/NEM12/nem12#SCENARIO10NEM1210183#ELECTDSM#NEMMCO
|
690
692
|
- spec/fixtures/nmi_checksum.json
|
691
693
|
- spec/lib/aemo/market/interval_spec.rb
|
694
|
+
- spec/lib/aemo/market/node_spec.rb
|
692
695
|
- spec/lib/aemo/market_spec.rb
|
693
696
|
- spec/lib/aemo/msats_spec.rb
|
694
697
|
- spec/lib/aemo/nem12_spec.rb
|