hdo-storting-importer 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. data/.gitignore +16 -0
  2. data/.gitmodules +3 -0
  3. data/.travis.yml +7 -0
  4. data/Gemfile +8 -0
  5. data/LICENSE +20 -0
  6. data/README.md +14 -0
  7. data/Rakefile +11 -0
  8. data/bin/hdo-converter +7 -0
  9. data/features/import.feature +85 -0
  10. data/features/step_definitions/import_steps.rb +0 -0
  11. data/features/support/env.rb +7 -0
  12. data/hdo-storting-importer.gemspec +17 -0
  13. data/lib/hdo/storting_importer/api_data_source.rb +62 -0
  14. data/lib/hdo/storting_importer/category.rb +55 -0
  15. data/lib/hdo/storting_importer/cli.rb +141 -0
  16. data/lib/hdo/storting_importer/committee.rb +35 -0
  17. data/lib/hdo/storting_importer/converter.rb +45 -0
  18. data/lib/hdo/storting_importer/core_ext/enumerable.rb +12 -0
  19. data/lib/hdo/storting_importer/data_source.rb +22 -0
  20. data/lib/hdo/storting_importer/disk_data_source.rb +61 -0
  21. data/lib/hdo/storting_importer/district.rb +36 -0
  22. data/lib/hdo/storting_importer/issue.rb +90 -0
  23. data/lib/hdo/storting_importer/ivar_equality.rb +22 -0
  24. data/lib/hdo/storting_importer/parsing_data_source.rb +59 -0
  25. data/lib/hdo/storting_importer/party.rb +31 -0
  26. data/lib/hdo/storting_importer/promise.rb +49 -0
  27. data/lib/hdo/storting_importer/promise_converter.rb +48 -0
  28. data/lib/hdo/storting_importer/representative.rb +106 -0
  29. data/lib/hdo/storting_importer/script_importer.rb +20 -0
  30. data/lib/hdo/storting_importer/util.rb +26 -0
  31. data/lib/hdo/storting_importer/version.rb +5 -0
  32. data/lib/hdo/storting_importer/vote.rb +171 -0
  33. data/lib/hdo/storting_importer.rb +41 -0
  34. data/spec/fixtures/input/categories.xml +1351 -0
  35. data/spec/fixtures/input/committees.xml +92 -0
  36. data/spec/fixtures/input/districts.xml +101 -0
  37. data/spec/fixtures/input/issues.xml +2852 -0
  38. data/spec/fixtures/input/parties.xml +42 -0
  39. data/spec/fixtures/input/promises-a.csv +341 -0
  40. data/spec/fixtures/input/propositions_2175.xml +64 -0
  41. data/spec/fixtures/input/propositions_2176.xml +64 -0
  42. data/spec/fixtures/input/representatives.xml +3218 -0
  43. data/spec/fixtures/input/representatives_today.xml +4872 -0
  44. data/spec/fixtures/input/vote_results_2175.xml +4400 -0
  45. data/spec/fixtures/input/vote_results_2176.xml +4400 -0
  46. data/spec/fixtures/input/votes.xml +85 -0
  47. data/spec/fixtures/output/categories.xml +803 -0
  48. data/spec/fixtures/output/committees.xml +71 -0
  49. data/spec/fixtures/output/districts.xml +79 -0
  50. data/spec/fixtures/output/issues.xml +836 -0
  51. data/spec/fixtures/output/parties.xml +31 -0
  52. data/spec/fixtures/output/promises-a.xml +3224 -0
  53. data/spec/fixtures/output/representatives.xml +2567 -0
  54. data/spec/fixtures/output/votes.xml +4899 -0
  55. data/spec/hdo/storting_importer/category_spec.rb +76 -0
  56. data/spec/hdo/storting_importer/committee_spec.rb +46 -0
  57. data/spec/hdo/storting_importer/converter_spec.rb +72 -0
  58. data/spec/hdo/storting_importer/district_spec.rb +54 -0
  59. data/spec/hdo/storting_importer/issue_spec.rb +115 -0
  60. data/spec/hdo/storting_importer/party_spec.rb +52 -0
  61. data/spec/hdo/storting_importer/promise_spec.rb +38 -0
  62. data/spec/hdo/storting_importer/representative_spec.rb +81 -0
  63. data/spec/hdo/storting_importer/vote_spec.rb +155 -0
  64. data/spec/spec_helper.rb +39 -0
  65. metadata +145 -0
@@ -0,0 +1,76 @@
1
+ # encoding: UTF-8
2
+ require 'spec_helper'
3
+
4
+ module Hdo
5
+ module StortingImporter
6
+ describe Category do
7
+
8
+ it 'builds categories from Storting XML list' do
9
+ xml = <<-XML
10
+ <?xml version="1.0" encoding="utf-8"?>
11
+ <emne_oversikt xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://data.stortinget.no">
12
+ <versjon>1.0</versjon>
13
+ <emne_liste>
14
+ <emne>
15
+ <versjon>1.0</versjon>
16
+ <er_hovedemne>true</er_hovedemne>
17
+ <id>5</id>
18
+ <navn>ARBEIDSLIV</navn>
19
+ <underemne_liste>
20
+ <emne>
21
+ <versjon>1.0</versjon>
22
+ <er_hovedemne>false</er_hovedemne>
23
+ <id>205</id>
24
+ <navn>ARBEIDSMILJØ</navn>
25
+ <underemne_liste />
26
+ </emne>
27
+ </underemne_liste>
28
+ </emne>
29
+ </emne_liste>
30
+ </emne_oversikt>
31
+ XML
32
+
33
+ categories = Category.from_storting_doc(parse(xml))
34
+ categories.size.should == 1
35
+
36
+ cat = categories.first
37
+ cat.name.should == "ARBEIDSLIV"
38
+ cat.external_id.should == "5"
39
+
40
+ cat.children.size.should == 1
41
+ cat.children.first.name.should == "ARBEIDSMILJØ"
42
+ end
43
+
44
+ it "can serialize as HDO XML" do
45
+ category = Category.new("5", "ARBEIDSLIV")
46
+ category.children << Category.new("205", "ARBEIDSMILJØ")
47
+ category.children << Category.new("94", "ARBEIDSVILKÅR")
48
+
49
+ category.to_hdo_xml.should == <<-XML
50
+ <category>
51
+ <externalId>5</externalId>
52
+ <name>ARBEIDSLIV</name>
53
+ <subcategories>
54
+ <category>
55
+ <externalId>205</externalId>
56
+ <name>ARBEIDSMILJØ</name>
57
+ </category>
58
+ <category>
59
+ <externalId>94</externalId>
60
+ <name>ARBEIDSVILKÅR</name>
61
+ </category>
62
+ </subcategories>
63
+ </category>
64
+ XML
65
+ end
66
+
67
+ it 'can deserialize HDO XML' do
68
+ orig = Category.new("5", "ARBEIDSLIV")
69
+ orig.children << Category.new("3", "LØNN")
70
+
71
+ Category.from_hdo_node(parse(orig.to_hdo_xml)).should == orig
72
+ end
73
+
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,46 @@
1
+ # encoding: UTF-8
2
+ require 'spec_helper'
3
+
4
+ module Hdo
5
+ module StortingImporter
6
+ describe Committee do
7
+
8
+ it 'builds committees from Storting XML list' do
9
+ xml = <<-XML
10
+ <?xml version="1.0" encoding="utf-8"?>
11
+ <komiteer_oversikt xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://data.stortinget.no">
12
+ <versjon>1.0</versjon>
13
+ <komiteer_liste>
14
+ <komite>
15
+ <versjon>1.0</versjon>
16
+ <id>ARBSOS</id>
17
+ <navn>Arbeids- og sosialkomiteen</navn>
18
+ </komite>
19
+ </komiteer_liste>
20
+ </komiteer_oversikt>
21
+ XML
22
+
23
+ committees = Committee.from_storting_doc(parse(xml))
24
+ committees.size.should == 1
25
+ committees.first.name.should == 'Arbeids- og sosialkomiteen'
26
+ committees.first.external_id.should == "ARBSOS"
27
+ end
28
+
29
+ it 'can serialize as HDO XML' do
30
+ Committee.new("ARBSOS", 'Arbeids- og sosialkomiteen').to_hdo_xml.should == <<-XML
31
+ <committee>
32
+ <externalId>ARBSOS</externalId>
33
+ <name>Arbeids- og sosialkomiteen</name>
34
+ </committee>
35
+ XML
36
+ end
37
+
38
+ it 'can deserialize HDO XML' do
39
+ com = Committee.new("ARBSOS", 'Arbeids- og sosialkomiteen')
40
+ Committee.from_hdo_node(parse(com.to_hdo_xml)).should == com
41
+ end
42
+
43
+
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,72 @@
1
+ require 'spec_helper'
2
+
3
+ module Hdo
4
+ module StortingImporter
5
+ module Converters
6
+
7
+ describe Converter do
8
+ let(:data_source) { DataSource.new }
9
+ let(:parsing_data_source) { ParsingDataSource.new(data_source) }
10
+ let(:converter) { Converter.new(parsing_data_source) }
11
+
12
+ def input_for(name)
13
+ doc = Nokogiri::XML.parse input_fixture(name)
14
+ doc.remove_namespaces!
15
+
16
+ doc
17
+ end
18
+
19
+ def output_for(name)
20
+ output_fixture(name)
21
+ end
22
+
23
+ [
24
+ :parties,
25
+ :committees,
26
+ :districts,
27
+ :categories,
28
+ :issues,
29
+ ].each { |name|
30
+ it "converts #{name}" do
31
+ data_source.should_receive(name).and_return(input_for(name))
32
+
33
+ actual_output = converter.xml_for(name)
34
+ actual_output.should == output_for(name)
35
+ end
36
+ }
37
+
38
+ it "converts representatives" do
39
+ data_source.should_receive(:representatives).and_return(input_for(:representatives))
40
+ data_source.should_receive(:representatives_today).and_return(input_for(:representatives_today))
41
+
42
+ actual = converter.xml_for(:representatives)
43
+ expected = output_for(:representatives)
44
+
45
+ actual.should == expected
46
+ end
47
+
48
+ it "converts votes" do
49
+ parsing_data_source.should_receive(:issues).and_return [mock(:external_id => 2175)]
50
+
51
+ data_source.should_receive(:votes_for).and_return(input_for(:votes))
52
+
53
+ data_source.should_receive(:propositions_for).with('2175').and_return(input_for(:propositions_2175))
54
+ data_source.should_receive(:vote_results_for).with('2175').and_return(input_for(:vote_results_2175))
55
+
56
+ data_source.should_receive(:propositions_for).with('2176').and_return(input_for(:propositions_2176))
57
+ data_source.should_receive(:vote_results_for).with('2176').and_return(input_for(:vote_results_2176))
58
+
59
+ actual = converter.xml_for(:votes)
60
+ expected = output_for(:votes)
61
+
62
+ actual.should == expected
63
+ end
64
+
65
+ it "converts promises" do
66
+ PromiseConverter.new(input_path('promises-a.csv')).xml.should == output_path('promises-a.xml').read
67
+ end
68
+
69
+ end
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,54 @@
1
+ # encoding: UTF-8
2
+ require 'spec_helper'
3
+
4
+ module Hdo
5
+ module StortingImporter
6
+ describe District do
7
+
8
+ it 'builds committees from Storting XML list' do
9
+ xml = <<-XML
10
+ <?xml version="1.0" encoding="utf-8"?>
11
+ <fylker_oversikt xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://data.stortinget.no">
12
+ <versjon>1.0</versjon>
13
+ <fylker_liste>
14
+ <fylke>
15
+ <versjon>1.0</versjon>
16
+ <id>Ak</id>
17
+ <navn>Akershus</navn>
18
+ </fylke>
19
+ <fylke>
20
+ <versjon>1.0</versjon>
21
+ <id>Bu</id>
22
+ <navn>Buskerud</navn>
23
+ </fylke>
24
+ </fylker_liste>
25
+ </fylker_oversikt>
26
+ XML
27
+
28
+ districts = District.from_storting_doc(parse(xml))
29
+ districts.size.should == 2
30
+
31
+ district = districts.first
32
+
33
+ district.name.should == 'Akershus'
34
+ district.external_id.should == 'Ak'
35
+ end
36
+
37
+ it 'can serialize as HDO XML' do
38
+ District.new("Ak", "Akershus").to_hdo_xml.should == <<-XML
39
+ <district>
40
+ <externalId>Ak</externalId>
41
+ <name>Akershus</name>
42
+ </district>
43
+ XML
44
+ end
45
+
46
+ it 'can deserialize HDO XML' do
47
+ orig = District.new("Ak", "Akershus")
48
+ District.from_hdo_node(parse(orig.to_hdo_xml)).should == orig
49
+ end
50
+
51
+
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,115 @@
1
+ # encoding: UTF-8
2
+ require 'spec_helper'
3
+
4
+ module Hdo
5
+ module StortingImporter
6
+ describe Issue do
7
+
8
+ def create_issue
9
+ Issue.new(
10
+ "53520",
11
+ "Inngåelse av avtale om opprettelse av sekretariatet for Den nordlige dimensjons partnerskap for helse og livskvalitet (NDPHS)",
12
+ "Samtykke til inngåelse av avtale av 25. november 2011 om opprettelse av sekretariatet for Den nordlige dimensjons partnerskap for helse og livskvalitet (NDPHS)",
13
+ "alminneligsak",
14
+ "mottatt",
15
+ "2012-04-20T00:00:00",
16
+ "Prop. 90 S (2011-2012)",
17
+ "proposisjon",
18
+ "Transport- og kommunikasjonskomiteen",
19
+ ['UTENRIKSSAKER', 'TRAKTATER', 'NORDISK SAMARBEID']
20
+ )
21
+ end
22
+
23
+ it 'builds issues from Storting XML list' do
24
+ xml = <<-XML
25
+ <?xml version="1.0" encoding="utf-8"?>
26
+ <saker_oversikt xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://data.stortinget.no">
27
+ <versjon>1.0</versjon>
28
+ <saker_liste>
29
+ <sak>
30
+ <versjon>1.0</versjon>
31
+ <behandlet_sesjon_id i:nil="true" />
32
+ <dokumentgruppe>proposisjon</dokumentgruppe>
33
+ <emne_liste>
34
+ <emne>
35
+ <versjon>1.0</versjon>
36
+ <er_hovedemne>true</er_hovedemne>
37
+ <id>163</id>
38
+ <navn>UTENRIKSSAKER</navn>
39
+ <underemne_liste />
40
+ </emne>
41
+ <emne>
42
+ <versjon>1.0</versjon>
43
+ <er_hovedemne>false</er_hovedemne>
44
+ <id>166</id>
45
+ <navn>TRAKTATER</navn>
46
+ <underemne_liste />
47
+ </emne>
48
+ <emne>
49
+ <versjon>1.0</versjon>
50
+ <er_hovedemne>false</er_hovedemne>
51
+ <id>171</id>
52
+ <navn>NORDISK SAMARBEID</navn>
53
+ <underemne_liste />
54
+ </emne>
55
+ </emne_liste>
56
+ <henvisning>Prop. 90 S (2011-2012)</henvisning>
57
+ <id>53520</id>
58
+ <innstilling_id>-1</innstilling_id>
59
+ <komite i:nil="true" />
60
+ <korttittel>Inngåelse av avtale om opprettelse av sekretariatet for Den nordlige dimensjons partnerskap for helse og livskvalitet (NDPHS)</korttittel>
61
+ <sak_fremmet_id>53520</sak_fremmet_id>
62
+ <saksordfoerer_liste />
63
+ <sist_oppdatert_dato>2012-04-20T00:00:00</sist_oppdatert_dato>
64
+ <status>mottatt</status>
65
+ <tittel>Samtykke til inngåelse av avtale av 25. november 2011 om opprettelse av sekretariatet for Den nordlige dimensjons partnerskap for helse og livskvalitet (NDPHS)</tittel>
66
+ <type>alminneligsak</type>
67
+ </sak>
68
+ </saker_liste>
69
+ </saker_oversikt>
70
+ XML
71
+
72
+ issues = Issue.from_storting_doc(parse(xml))
73
+ issues.size.should == 1
74
+
75
+ issue = issues.first
76
+ issue.document_group.should == 'proposisjon'
77
+ issue.categories.should == ['UTENRIKSSAKER', 'TRAKTATER', 'NORDISK SAMARBEID']
78
+ issue.reference.should == 'Prop. 90 S (2011-2012)'
79
+ issue.external_id.should == '53520'
80
+ issue.summary.should == 'Inngåelse av avtale om opprettelse av sekretariatet for Den nordlige dimensjons partnerskap for helse og livskvalitet (NDPHS)'
81
+ issue.last_update.should == '2012-04-20T00:00:00'
82
+ issue.status.should == 'mottatt'
83
+ issue.description.should == 'Samtykke til inngåelse av avtale av 25. november 2011 om opprettelse av sekretariatet for Den nordlige dimensjons partnerskap for helse og livskvalitet (NDPHS)'
84
+ issue.type.should == 'alminneligsak'
85
+ end
86
+
87
+ it 'can serialize as HDO XML' do
88
+ create_issue.to_hdo_xml.should == <<-XML
89
+ <issue>
90
+ <externalId>53520</externalId>
91
+ <summary>Inngåelse av avtale om opprettelse av sekretariatet for Den nordlige dimensjons partnerskap for helse og livskvalitet (NDPHS)</summary>
92
+ <description>Samtykke til inngåelse av avtale av 25. november 2011 om opprettelse av sekretariatet for Den nordlige dimensjons partnerskap for helse og livskvalitet (NDPHS)</description>
93
+ <type>alminneligsak</type>
94
+ <status>mottatt</status>
95
+ <lastUpdate>2012-04-20T00:00:00</lastUpdate>
96
+ <reference>Prop. 90 S (2011-2012)</reference>
97
+ <documentGroup>proposisjon</documentGroup>
98
+ <committee>Transport- og kommunikasjonskomiteen</committee>
99
+ <categories>
100
+ <category>UTENRIKSSAKER</category>
101
+ <category>TRAKTATER</category>
102
+ <category>NORDISK SAMARBEID</category>
103
+ </categories>
104
+ </issue>
105
+ XML
106
+ end
107
+
108
+ it 'can deserialize HDO XML' do
109
+ orig = create_issue
110
+ Issue.from_hdo_node(parse(orig.to_hdo_xml)).should == orig
111
+ end
112
+
113
+ end
114
+ end
115
+ end
@@ -0,0 +1,52 @@
1
+ # encoding: UTF-8
2
+ require 'spec_helper'
3
+
4
+ module Hdo
5
+ module StortingImporter
6
+ describe Party do
7
+
8
+ it 'builds parties from Storting XML list' do
9
+ xml = <<-XML
10
+ <?xml version="1.0" encoding="utf-8"?>
11
+ <partier_oversikt xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://data.stortinget.no">
12
+ <versjon>1.0</versjon>
13
+ <partier_liste>
14
+ <parti>
15
+ <versjon>1.0</versjon>
16
+ <id>A</id>
17
+ <navn>Arbeiderpartiet</navn>
18
+ </parti>
19
+ <parti>
20
+ <versjon>1.0</versjon>
21
+ <id>FrP</id>
22
+ <navn>Fremskrittspartiet</navn>
23
+ </parti>
24
+ </partier_liste>
25
+ </partier_oversikt>
26
+ XML
27
+
28
+ parties = Party.from_storting_doc(parse(xml))
29
+ parties.size.should == 2
30
+
31
+ parties.map(&:external_id).should == ['A', 'FrP']
32
+ parties.map(&:name).should == ['Arbeiderpartiet', 'Fremskrittspartiet']
33
+ end
34
+
35
+ it 'can serialize as HDO XML' do
36
+ Party.new("A", "Arbeiderpartiet").to_hdo_xml.should == <<-XML
37
+ <party>
38
+ <externalId>A</externalId>
39
+ <name>Arbeiderpartiet</name>
40
+ </party>
41
+ XML
42
+ end
43
+
44
+ it 'can deserialize HDO XML' do
45
+ orig = Party.new('Sp', 'Senterpartiet')
46
+ Party.from_hdo_node(parse(orig.to_hdo_xml)).should == orig
47
+ end
48
+
49
+
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,38 @@
1
+ # encoding: UTF-8
2
+ require 'spec_helper'
3
+
4
+ module Hdo
5
+ module StortingImporter
6
+ describe Promise do
7
+
8
+ it 'builds promises from CSV' do
9
+ csv = <<-CSV
10
+ Parti;Løftetekst;Generell;Emner;Kilde;Side
11
+ A;Ha et inntektspolitisk samarbeid og en økonomisk politikk som sikrer arbeid til alle. ;Ja;LØNN , SYSSELSETTING;PP;10
12
+ A;Følge handlingsregelen for en forsvarlig bruk av oljepenger.;Ja;FINANSER;PP;10
13
+ A;Bruke penger slik at det bidrar til å utjevne svingninger i økonomien.;Ja;FINANSER;PP;10
14
+ A;Sette ned et utvalg som skal gjennomgå årsakene til finanskrisen.;Nei;FINANSER;PP;10
15
+ A;Gjennomføre de tiltak som er nødvendig for å sikre et stabilt og fungerende finansmarked.;Ja;FINANSER;PP;10
16
+ A;Stille etiske krav til forvaltning av statlig kapital. ;Ja;FINANSER;PP;10
17
+ A;Holde de samlede skattene og avgiftene på samme nivå som i dag.;Nei;SKATTER;PP;10
18
+ A;Ha en grundig evaluering av skattereformen av 2006, med særlig blikk på fordelingsvirkningene. ;Ja;SKATTER;PP;10
19
+ A;Opprettholde formueskatten, men gjøre den mer rettferdig.;Ja;SKATTER;PP;10
20
+ CSV
21
+
22
+
23
+ promises = Promise.from_csv(csv)
24
+
25
+ promises.size.should == 9
26
+
27
+ prom = promises.first
28
+ prom.party.should == 'A'
29
+ prom.body.should == 'Ha et inntektspolitisk samarbeid og en økonomisk politikk som sikrer arbeid til alle.'
30
+ prom.general.should be_true
31
+ prom.categories.should == %w[LØNN SYSSELSETTING]
32
+ prom.source.should == "PP"
33
+ prom.page.should == '10'
34
+ end
35
+
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,81 @@
1
+ # encoding: UTF-8
2
+
3
+ module Hdo
4
+ module StortingImporter
5
+ describe Representative do
6
+
7
+ def create_representative
8
+ Representative.new('ADA', 'André Oktay', 'Dahl', 'M', '1975-07-07T00:00:00', '0001-01-01T00:00:00', 'Akershus', 'Høyre', ['Justiskomiteen'], '2011-2012')
9
+ end
10
+
11
+ it "builds representatives from the Storting XML list" do
12
+ xml = <<-XML
13
+ <?xml version="1.0" encoding="utf-8"?>
14
+ <representanter_oversikt xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://data.stortinget.no">
15
+ <versjon>1.0</versjon>
16
+ <representanter_liste>
17
+ <representant>
18
+ <versjon>1.0</versjon>
19
+ <doedsdato>0001-01-01T00:00:00</doedsdato>
20
+ <etternavn>Dahl</etternavn>
21
+ <foedselsdato>1975-07-07T00:00:00</foedselsdato>
22
+ <fornavn>André Oktay</fornavn>
23
+ <id>ADA</id>
24
+ <kjoenn>mann</kjoenn>
25
+ <fylke>
26
+ <versjon>1.0</versjon>
27
+ <id>Ak</id>
28
+ <navn>Akershus</navn>
29
+ </fylke>
30
+ <parti>
31
+ <versjon>1.0</versjon>
32
+ <id>H</id>
33
+ <navn>Høyre</navn>
34
+ </parti>
35
+ </representant>
36
+ </representanter_liste>
37
+ </representanter_oversikt>
38
+ XML
39
+
40
+ representatives = Representative.from_storting_doc(parse(xml))
41
+ representatives.size.should == 1
42
+
43
+ rep = representatives.first
44
+ rep.first_name.should == 'André Oktay'
45
+ rep.last_name.should == 'Dahl'
46
+ rep.gender.should == 'M'
47
+ rep.district.should == 'Akershus'
48
+ rep.party.should == 'Høyre'
49
+ rep.external_id.should == 'ADA'
50
+ rep.date_of_birth.should == '1975-07-07T00:00:00'
51
+ rep.date_of_death.should == '0001-01-01T00:00:00'
52
+ end
53
+
54
+ it 'converts itself into HDO XML' do
55
+ rep = create_representative
56
+ rep.to_hdo_xml.should == <<-XML
57
+ <representative>
58
+ <externalId>ADA</externalId>
59
+ <firstName>André Oktay</firstName>
60
+ <lastName>Dahl</lastName>
61
+ <gender>M</gender>
62
+ <dateOfBirth>1975-07-07T00:00:00</dateOfBirth>
63
+ <dateOfDeath>0001-01-01T00:00:00</dateOfDeath>
64
+ <district>Akershus</district>
65
+ <party>Høyre</party>
66
+ <committees>
67
+ <committee>Justiskomiteen</committee>
68
+ </committees>
69
+ <period>2011-2012</period>
70
+ </representative>
71
+ XML
72
+ end
73
+
74
+ it 'can deserialize HDO XML' do
75
+ rep = create_representative
76
+ Representative.from_hdo_node(parse(rep.to_hdo_xml)).should == rep
77
+ end
78
+
79
+ end
80
+ end
81
+ end