concur_connect 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. data/.document +11 -0
  2. data/.gitignore +40 -0
  3. data/.rspec +1 -0
  4. data/Gemfile +11 -0
  5. data/Guardfile +28 -0
  6. data/LICENSE +20 -0
  7. data/README.rdoc +28 -0
  8. data/Rakefile +42 -0
  9. data/concur_connect.gemspec +41 -0
  10. data/lib/concur_connect.rb +23 -0
  11. data/lib/concur_connect/expense_finder.rb +30 -0
  12. data/lib/concur_connect/expense_report.rb +21 -0
  13. data/lib/concur_connect/expense_report_finder.rb +44 -0
  14. data/lib/concur_connect/finder.rb +9 -0
  15. data/lib/concur_connect/itinerary.rb +5 -0
  16. data/lib/concur_connect/itinerary_finder.rb +35 -0
  17. data/lib/concur_connect/session.rb +44 -0
  18. data/lib/concur_connect/user.rb +17 -0
  19. data/lib/concur_connect/user_finder.rb +28 -0
  20. data/lib/concur_connect/version.rb +3 -0
  21. data/spec/concur_connect/expense.rb +5 -0
  22. data/spec/concur_connect/expense_finder_spec.rb +77 -0
  23. data/spec/concur_connect/expense_report_finder_spec.rb +81 -0
  24. data/spec/concur_connect/expense_report_spec.rb +5 -0
  25. data/spec/concur_connect/itinerary_finder_spec.rb +43 -0
  26. data/spec/concur_connect/user_finder_spec.rb +26 -0
  27. data/spec/concur_connect/user_spec.rb +21 -0
  28. data/spec/concur_connect_spec.rb +30 -0
  29. data/spec/fixtures/vcr_cassettes/GET_user/v1_0/User.yml +40 -0
  30. data/spec/fixtures/vcr_cassettes/expense_list.yml +36 -0
  31. data/spec/fixtures/vcr_cassettes/expense_report_list_by_date.yml +35 -0
  32. data/spec/fixtures/vcr_cassettes/expense_report_list_by_status.yml +37 -0
  33. data/spec/fixtures/vcr_cassettes/itinerary_list.yml +37 -0
  34. data/spec/fixtures/vcr_cassettes/session_expense_reports.yml +35 -0
  35. data/spec/fixtures/vcr_cassettes/session_expenses.yml +36 -0
  36. data/spec/fixtures/vcr_cassettes/session_user.yml +38 -0
  37. data/spec/fixtures/vcr_cassettes/session_user_expense_reports.yml +34 -0
  38. data/spec/fixtures/vcr_cassettes/user.yml +40 -0
  39. data/spec/spec_helper.rb +12 -0
  40. data/spec/support/vcr.rb +6 -0
  41. metadata +230 -0
@@ -0,0 +1,17 @@
1
+ require 'concur_connect/expense_report'
2
+
3
+ module ConcurConnect
4
+ class User
5
+ attr_accessor :login_id, :first_name, :last_name, :email,
6
+ :country_code, :currency_code, :country_sub_code,
7
+ :session
8
+
9
+ def expense_reports(status = 'APPROVED', date = nil)
10
+ @expense_reports ||= expense_report_finder.find(login_id, status, date)
11
+ end
12
+
13
+ def expense_report_finder
14
+ @expense_report_finder ||= ExpenseReportFinder.new session
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,28 @@
1
+ require 'concur_connect/user'
2
+
3
+ module ConcurConnect
4
+ class UserFinder
5
+ attr_accessor :session
6
+
7
+ def initialize(session)
8
+ self.session = session
9
+ end
10
+
11
+ def find(id)
12
+ response = session.get 'user/v1.0/User' do |g|
13
+ g.headers['X-CompanyDomain'] = session.company_id
14
+ g.headers['X-UserID'] = id
15
+ end
16
+ build_user response.body
17
+ end
18
+
19
+ def build_user(response)
20
+ user = User.new
21
+ user.login_id = response['LoginId']
22
+ user.first_name = response['FirstName']
23
+ user.last_name = response['LastName']
24
+ user.session = session
25
+ user
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,3 @@
1
+ module ConcurConnect
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,5 @@
1
+ module ConcurConnect
2
+ class Expense
3
+ attr_accessor :type, :amount, :vendor
4
+ end
5
+ end
@@ -0,0 +1,77 @@
1
+ require 'spec_helper'
2
+
3
+ describe ConcurConnect::ExpenseFinder do
4
+ let(:session) {
5
+ ConcurConnect.session '3dcPjZyTeQziAndLnUALTI', 'ZipGipKjsd4ypFx2qcJ5sCuBY9FYbJlE', 't0026855k9r8'
6
+ }
7
+ let(:finder) { ConcurConnect::ExpenseFinder.new session }
8
+
9
+ describe '#find' do
10
+ it 'gets a list of expense reports with a given status' do
11
+ VCR.use_cassette('expense list', :record => :once) do
12
+ list = finder.find('nABR4fUZDftz3veYYzMffJR5k3uLU7xQy')
13
+ list.should_not be_empty
14
+ list.each { |i| i.should be_a(ConcurConnect::Expense) }
15
+ end
16
+ end
17
+ end
18
+
19
+ describe '#build_expenses' do
20
+ it 'handles an empty list of expenses' do
21
+ ers = finder.build_expenses({'ExpenseEntriesList' => nil})
22
+ ers.should be_empty
23
+ end
24
+ it 'builds a list of a single expense' do
25
+ ers = finder.build_expenses({'ExpenseEntriesList' => {
26
+ 'ExpenseEntrySummary' => {
27
+ 'ApprovedAmount' => '678.00000000',
28
+ 'Expense-Entry-Url' => 'http://www.concursolutions.com/api/expense/expensereport/v1.1/report/iiwEUE87weOisd2sF2hsq/entry/Irusj23j48hks9IIor92746SLL92039jfyd',
29
+ 'ExpenseName' => 'Advertising',
30
+ 'LocationName' => 'Redmond, Washington',
31
+ 'TransactionAmount' => '678.00000000',
32
+ 'TransactionCrnCode' => 'USD',
33
+ 'VendorDescription' => nil,
34
+ 'VendorListName' => 'The Daily Herald'
35
+ }}})
36
+ ers.should_not be_empty
37
+ ers.each do |expense|
38
+ expense.should be_a(ConcurConnect::Expense)
39
+ expense.type.length.should > 0
40
+ expense.amount.to_f.should > 0
41
+ expense.vendor.length.should > 0
42
+ end
43
+ end
44
+ it 'builds a list of new expenses' do
45
+ ers = finder.build_expenses({'ExpenseEntriesList' => {
46
+ 'ExpenseEntrySummary' => [{
47
+ 'ApprovedAmount' => '678.00000000',
48
+ 'Expense-Entry-Url' => 'http://www.concursolutions.com/api/expense/expensereport/v1.1/report/iiwEUE87weOisd2sF2hsq/entry/Irusj23j48hks9IIor92746SLL92039jfyd',
49
+ 'ExpenseName' => 'Advertising',
50
+ 'LocationName' => 'Redmond, Washington',
51
+ 'TransactionAmount' => '678.00000000',
52
+ 'TransactionCrnCode' => 'USD',
53
+ 'VendorDescription' => nil,
54
+ 'VendorListName' => 'The Daily Herald'
55
+ },
56
+ {
57
+ 'ApprovedAmount' => '778.00000000',
58
+ 'Expense-Entry-Url' => 'http://www.concursolutions.com/api/expense/expensereport/v1.1/report/iiwEUE87weOisd2sF2hsq/entry/Irusj23j48hks9IIor92746SLL92039jfye',
59
+ 'ExpenseName' => 'Gas',
60
+ 'LocationName' => 'Tacoma, Washington',
61
+ 'TransactionAmount' => '778.00000000',
62
+ 'TransactionCrnCode' => 'USD',
63
+ 'VendorDescription' => nil,
64
+ 'VendorListName' => 'The Daily Herald'
65
+ }
66
+ ]}})
67
+ ers.should_not be_empty
68
+ ers.each do |expense|
69
+ expense.should be_a(ConcurConnect::Expense)
70
+ expense.type.length.should > 0
71
+ expense.amount.to_f.should > 0
72
+ expense.vendor.length.should > 0
73
+ end
74
+ end
75
+ end
76
+ end
77
+
@@ -0,0 +1,81 @@
1
+ require 'spec_helper'
2
+
3
+ describe ConcurConnect::ExpenseReportFinder do
4
+ let(:session) {
5
+ ConcurConnect.session '3dcPjZyTeQziAndLnUALTI', 'ZipGipKjsd4ypFx2qcJ5sCuBY9FYbJlE', 't0026855k9r8'
6
+ }
7
+ let(:finder) { ConcurConnect::ExpenseReportFinder.new session }
8
+
9
+ describe '#find' do
10
+ it 'gets a list of expense reports with a given status' do
11
+ VCR.use_cassette('expense_report list by status', :record => :once) do
12
+ list = finder.find('derek.kastner@brighterplanet.com', 'APPROVED')
13
+ list.should_not be_empty
14
+ list.each { |i| i.should be_a(ConcurConnect::ExpenseReport) }
15
+ end
16
+ end
17
+ it 'gets a list of expense reports with a given status and last modified date' do
18
+ VCR.use_cassette('expense_report list by date', :record => :once) do
19
+ list = finder.find(nil, 'APPROVED', Time.now)
20
+ list.should_not be_empty
21
+ list.each { |i| i.should be_a(ConcurConnect::ExpenseReport) }
22
+ end
23
+ end
24
+ end
25
+
26
+ describe '#build_expense_reports' do
27
+ it 'handles an empty list of expense reports' do
28
+ ers = finder.build_expense_reports({'ReportsList' => nil})
29
+ ers.should be_empty
30
+ end
31
+ it 'builds a list of a single expense report' do
32
+ ers = finder.build_expense_reports({'ReportsList' => {
33
+ 'ReportSummary' => {
34
+ 'ReportName' => 'August Expenses',
35
+ 'ReportTotal' => '245.00000000',
36
+ 'ReportId' => '14B7C9053CAA4864A27F',
37
+ 'ReportDate' => '2010-08-06T00:00:00',
38
+ 'LastComment' => '',
39
+ 'Report-Details-Url' => 'http://www.concursolutions.com/api/expense/expensereport/v1.1/report/ndfsdfseSDFDwaXZesdsfs',
40
+ 'Report-Full-Details-Url' => 'http://www.concursolutions.com/api/expense/expensereport/v1.1/reportfulldetails/ndfsdfseSDFDwaXZesdsfs'
41
+ }}})
42
+ ers.should_not be_empty
43
+ ers.each do |expense_report|
44
+ expense_report.should be_a(ConcurConnect::ExpenseReport)
45
+ expense_report.id.should =~ /^[A-F0-9]+$/
46
+ expense_report.name.should == 'August Expenses'
47
+ expense_report.date.should =~ /\d{4}-\d\d-\d\d/
48
+ end
49
+ end
50
+ it 'builds a list of new expense reports' do
51
+ ers = finder.build_expense_reports({'ReportsList' => {
52
+ 'ReportSummary' => [{
53
+ 'ReportName' => 'August Expenses',
54
+ 'ReportTotal' => '245.00000000',
55
+ 'ReportId' => '14B7C9053CAA4864A27F',
56
+ 'ReportDate' => '2010-08-06T00:00:00',
57
+ 'LastComment' => '',
58
+ 'Report-Details-Url' => 'http://www.concursolutions.com/api/expense/expensereport/v1.1/report/ndfsdfseSDFDwaXZesdsfs',
59
+ 'Report-Full-Details-Url' => 'http://www.concursolutions.com/api/expense/expensereport/v1.1/reportfulldetails/ndfsdfseSDFDwaXZesdsfs'
60
+ },
61
+ {
62
+ 'ReportName' => 'September Expenses',
63
+ 'ReportTotal' => '345.00000000',
64
+ 'ReportId' => '14B7C9053CAA4864A27F',
65
+ 'ReportDate' => '2011-09-06T00:00:00',
66
+ 'LastComment' => '',
67
+ 'Report-Details-Url' => 'http://www.concursolutions.com/api/expense/expensereport/v1.1/report/ndfsdfseSDFDwaXZesdsfs',
68
+ 'Report-Full-Details-Url' => 'http://www.concursolutions.com/api/expense/expensereport/v1.1/reportfulldetails/ndfsdfseSDFDwaXZesdsfs'
69
+ }
70
+ ]}})
71
+ ers.should_not be_empty
72
+ ers.each do |expense_report|
73
+ expense_report.should be_a(ConcurConnect::ExpenseReport)
74
+ expense_report.id.should =~ /^[A-F0-9]+$/
75
+ expense_report.name.length.should > 0
76
+ expense_report.date.should =~ /\d{4}-\d\d-\d\d/
77
+ end
78
+ end
79
+ end
80
+ end
81
+
@@ -0,0 +1,5 @@
1
+ require 'spec_helper'
2
+ require 'concur_connect/expense_report'
3
+
4
+ describe ConcurConnect::ExpenseReport do
5
+ end
@@ -0,0 +1,43 @@
1
+ require 'spec_helper'
2
+
3
+ describe ConcurConnect::ItineraryFinder do
4
+ let(:session) {
5
+ ConcurConnect.session '3dcPjZyTeQziAndLnUALTI', 'ZipGipKjsd4ypFx2qcJ5sCuBY9FYbJlE', 't0026855k9r8'
6
+ }
7
+ let(:finder) { ConcurConnect::ItineraryFinder.new session }
8
+
9
+ describe '#find' do
10
+ it 'finds and builds a list of itineraries' do
11
+ VCR.use_cassette('itinerary list', :record => :once) do
12
+ list = finder.find('derek.kastner@brighterplanet.com')
13
+ list.should_not be_empty
14
+ list.each { |i| i.should be_a(ConcurConnect::Itinerary) }
15
+ end
16
+ end
17
+ end
18
+
19
+ describe '#build_itineraries' do
20
+ it 'handles an empty list of itineraries' do
21
+ is = finder.build_itineraries({'ItineraryInfoList' => nil})
22
+ is.should be_empty
23
+ end
24
+ it 'builds a list of new itineraries' do
25
+ is = finder.build_itineraries({'ItineraryInfoList' => {
26
+ 'ItineraryInfo' => [{
27
+ 'id' => 'https://www.concursoultions.com/api/travel/trip/v1.0/4294967509',
28
+ 'TripName' => 'My Trip',
29
+ 'StartDateLocal' => '2010-02-15T09:00:00',
30
+ 'EndDateLocal' => '2010-02-15T09:00:00'
31
+ }]}})
32
+ is.should_not be_empty
33
+ is.each do |itinerary|
34
+ itinerary.should be_a(ConcurConnect::Itinerary)
35
+ itinerary.concur_id.should =~ /http/
36
+ itinerary.name.should =~ /\w+/
37
+ itinerary.start_date.should =~ /\d{4}-\d\d-\d\d/
38
+ itinerary.end_date.should =~ /\d{4}-\d\d-\d\d/
39
+ end
40
+ end
41
+ end
42
+ end
43
+
@@ -0,0 +1,26 @@
1
+ require 'spec_helper'
2
+
3
+ describe ConcurConnect::UserFinder do
4
+ let(:session) {
5
+ ConcurConnect.session '3dcPjZyTeQziAndLnUALTI', 'ZipGipKjsd4ypFx2qcJ5sCuBY9FYbJlE', 't0026855k9r8'
6
+ }
7
+ let(:finder) { ConcurConnect::UserFinder.new session }
8
+
9
+ describe '#find' do
10
+ it 'finds and builds a user' do
11
+ VCR.use_cassette('user', :record => :once) do
12
+ user = finder.find('derek.kastner@brighterplanet.com')
13
+ user.should be_a(ConcurConnect::User)
14
+ end
15
+ end
16
+ end
17
+
18
+ describe '#build_user' do
19
+ it 'builds a new user' do
20
+ u = finder.build_user({'LoginId' => 'user@example.com'})
21
+ u.should be_a(ConcurConnect::User)
22
+ u.login_id.should == 'user@example.com'
23
+ end
24
+ end
25
+ end
26
+
@@ -0,0 +1,21 @@
1
+ require 'spec_helper'
2
+ require 'concur_connect/user'
3
+ require 'concur_connect/expense_report'
4
+
5
+ describe ConcurConnect::User do
6
+ #describe '#itineraries' do
7
+ #let(:user) { ConcurConnect::User.new }
8
+ #it 'fetches all itineraries for the user if no date is specified' do
9
+ #user.itineraries
10
+ #end
11
+ #it 'fetches all itineraries for the user after a specified date'
12
+ #end
13
+
14
+ describe '#expense_reports' do
15
+ it 'fetches all the expense reports for the user' do
16
+ pending
17
+ u.expense_reports.should_not be_empty
18
+ u.expense_reports.each { |er| er.should be_a?(ExpenseReport) }
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,30 @@
1
+ require 'spec_helper'
2
+
3
+ describe ConcurConnect do
4
+ it 'is easy to use' do
5
+ concur = ConcurConnect.session '3dcPjZyTeQziAndLnUALTI', 'ZipGipKjsd4ypFx2qcJ5sCuBY9FYbJlE', 't0026855k9r8'
6
+ concur.should be_a(ConcurConnect::Session)
7
+ user = nil
8
+ expense_reports = nil
9
+
10
+ VCR.use_cassette('session expense reports', :record => :once) do
11
+ expense_reports = concur.expense_reports Date.new(2011, 9, 1)
12
+ expense_reports.should_not be_empty
13
+ end
14
+
15
+ VCR.use_cassette('session expenses', :record => :once) do
16
+ expenses = expense_reports.first.expenses
17
+ expenses.should_not be_empty
18
+ end
19
+
20
+ VCR.use_cassette('session user', :record => :once) do
21
+ user = concur.user('derek.kastner@brighterplanet.com')
22
+ user.should be_a(ConcurConnect::User)
23
+ end
24
+
25
+ #VCR.use_cassette('session user expense reports', :record => :once) do
26
+ #reports = user.expense_reports
27
+ #reports.should_not be_empty
28
+ #end
29
+ end
30
+ end
@@ -0,0 +1,40 @@
1
+ ---
2
+ - !ruby/struct:VCR::HTTPInteraction
3
+ request: !ruby/struct:VCR::Request
4
+ method: :get
5
+ uri: https://www.concursolutions.com:443/api/user/v1.0/User
6
+ body: !!null
7
+ headers:
8
+ x-companydomain:
9
+ - t0026855k9r8
10
+ x-userid:
11
+ - derek.kastner@brighterplanet.com
12
+ authorization:
13
+ - OAuth oauth_consumer_key="3dcPjZyTeQziAndLnUALTI", oauth_nonce="2256b50d188b97c845313c9b0ef30f32",
14
+ oauth_signature="7YvuAEg6v35sSPloetgEijy1heE%3D", oauth_signature_method="HMAC-SHA1",
15
+ oauth_timestamp="1322069185", oauth_version="1.0"
16
+ accept-encoding:
17
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
18
+ response: !ruby/struct:VCR::Response
19
+ status: !ruby/struct:VCR::ResponseStatus
20
+ code: 200
21
+ message: OK
22
+ headers:
23
+ cache-control:
24
+ - private
25
+ content-type:
26
+ - application/xml
27
+ server:
28
+ - Microsoft-IIS/7.5
29
+ x-aspnet-version:
30
+ - 2.0.50727
31
+ x-powered-by:
32
+ - ASP.NET
33
+ webserver:
34
+ - usseatuicte53
35
+ date:
36
+ - Wed, 23 Nov 2011 17:26:25 GMT
37
+ content-length:
38
+ - '1007'
39
+ body: <UserProfile xmlns="http://www.concursolutions.com/api/user/2011/02" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><Active>Y</Active><CashAdvanceAccountCode/><CrnKey>USD</CrnKey><CtryCode>US</CtryCode><CtrySubCode/><Custom1/><Custom10/><Custom11/><Custom12/><Custom13/><Custom14/><Custom15/><Custom16/><Custom17/><Custom18/><Custom19/><Custom2/><Custom20/><Custom21/><Custom3/><Custom4/><Custom5/><Custom6/><Custom7/><Custom8/><Custom9/><EmailAddress>derek.kastner@brighterplanet.com</EmailAddress><EmpId>derek.kastner@brighterplanet.com</EmpId><ExpenseApprover>Y</ExpenseApprover><ExpenseApproverEmployeeID/><ExpenseUser>Y</ExpenseUser><FirstName>Derek</FirstName><InvoiceApprover>N</InvoiceApprover><InvoiceUser>N</InvoiceUser><IsTestEmp>N</IsTestEmp><LastName>Kastner</LastName><LedgerName>DEFAULT</LedgerName><LocaleName>en_US</LocaleName><LoginId>derek.kastner@brighterplanet.com</LoginId><Mi/><OrgUnit1/><OrgUnit2/><OrgUnit3/><OrgUnit4/><OrgUnit5/><OrgUnit6/><TripUser>N</TripUser></UserProfile>
40
+ http_version: '1.1'
@@ -0,0 +1,36 @@
1
+ ---
2
+ - !ruby/struct:VCR::HTTPInteraction
3
+ request: !ruby/struct:VCR::Request
4
+ method: :get
5
+ uri: https://www.concursolutions.com:443/api/expense/expensereport/v1.1/report/nABR4fUZDftz3veYYzMffJR5k3uLU7xQy/entries
6
+ body: !!null
7
+ headers:
8
+ authorization:
9
+ - OAuth oauth_consumer_key="3dcPjZyTeQziAndLnUALTI", oauth_nonce="8fa77459e675b5a1edbe0bb7bfb1696c",
10
+ oauth_signature="q1beMM3icyK7HaC0jnARXIwoyHo%3D", oauth_signature_method="HMAC-SHA1",
11
+ oauth_timestamp="1324580513", oauth_version="1.0"
12
+ accept-encoding:
13
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
14
+ response: !ruby/struct:VCR::Response
15
+ status: !ruby/struct:VCR::ResponseStatus
16
+ code: 200
17
+ message: OK
18
+ headers:
19
+ cache-control:
20
+ - private
21
+ content-type:
22
+ - application/xml
23
+ server:
24
+ - Microsoft-IIS/7.5
25
+ x-aspnet-version:
26
+ - 2.0.50727
27
+ webserver:
28
+ - usseaeuicte34
29
+ date:
30
+ - Thu, 22 Dec 2011 19:01:54 GMT
31
+ content-length:
32
+ - '1077'
33
+ body: <ExpenseEntriesList xmlns="http://www.concursolutions.com/api/expense/expensereport/2011/03"
34
+ xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><ExpenseEntrySummary><ApprovedAmount>83.22000000</ApprovedAmount><Expense-Entry-Url>https://www.concursolutions.com/api/expense/expensereport/v1.1/report/nABR4fUZDftz3veYYzMffJR5k3uLU7xQy/entry/n7w$pAOZMAeLZLiZZHq6M764nL1AHtcMtQ</Expense-Entry-Url><ExpenseName>Gas</ExpenseName><LocationName/><TransactionAmount>83.22000000</TransactionAmount><TransactionCrnCode>USD</TransactionCrnCode><VendorDescription/><VendorListName/></ExpenseEntrySummary><ExpenseEntrySummary><ApprovedAmount>179.82000000</ApprovedAmount><Expense-Entry-Url>https://www.concursolutions.com/api/expense/expensereport/v1.1/report/nABR4fUZDftz3veYYzMffJR5k3uLU7xQy/entry/n7w$pAOZByd82Y9p6KwXMFISMo1mcNqatX</Expense-Entry-Url><ExpenseName>Personal
35
+ Car Mileage</ExpenseName><LocationName/><TransactionAmount>179.82000000</TransactionAmount><TransactionCrnCode>USD</TransactionCrnCode><VendorDescription/><VendorListName/></ExpenseEntrySummary></ExpenseEntriesList>
36
+ http_version: '1.1'
@@ -0,0 +1,35 @@
1
+ ---
2
+ - !ruby/struct:VCR::HTTPInteraction
3
+ request: !ruby/struct:VCR::Request
4
+ method: :get
5
+ uri: https://www.concursolutions.com:443/api/expense/expensereport/v1.1/reportslist/APPROVED/LastModified?date=2011-12-22
6
+ body: !!null
7
+ headers:
8
+ authorization:
9
+ - OAuth oauth_consumer_key="3dcPjZyTeQziAndLnUALTI", oauth_nonce="5a97820cd02e5126b3b219e81cd11991",
10
+ oauth_signature="bzj5lx%2BXN9Lr%2BdYMPIGYheyItbQ%3D", oauth_signature_method="HMAC-SHA1",
11
+ oauth_timestamp="1324566949", oauth_version="1.0"
12
+ accept-encoding:
13
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
14
+ response: !ruby/struct:VCR::Response
15
+ status: !ruby/struct:VCR::ResponseStatus
16
+ code: 200
17
+ message: OK
18
+ headers:
19
+ cache-control:
20
+ - private
21
+ content-type:
22
+ - application/xml
23
+ server:
24
+ - Microsoft-IIS/7.5
25
+ x-aspnet-version:
26
+ - 2.0.50727
27
+ webserver:
28
+ - usseatuicte66
29
+ date:
30
+ - Thu, 22 Dec 2011 15:15:50 GMT
31
+ content-length:
32
+ - '750'
33
+ body: <ReportsList xmlns="http://www.concursolutions.com/api/expense/expensereport/2011/03"
34
+ xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><ReportSummary><ReportName>Fuel</ReportName><ReportId>AD63693E22DB4F65BA05</ReportId><ReportTotal>263.04000000</ReportTotal><ReportDate>2011-11-23T00:00:00</ReportDate><LastComment/><Report-Details-Url>https://www.concursolutions.com/api/expense/expensereport/v1.1/report/nABR4fUZDftz3veYYzMffJR5k3uLU7xQy</Report-Details-Url><Report-Full-Details-Url>https://www.concursolutions.com/api/expense/expensereport/v1.1/reportfulldetails/nABR4fUZDftz3veYYzMffJR5k3uLU7xQy</Report-Full-Details-Url><ExpenseUserXUserID>derek.kastner@brighterplanet.com</ExpenseUserXUserID><ApproverXUserID/></ReportSummary></ReportsList>
35
+ http_version: '1.1'