Skip to content

Commit b2519ef

Browse files
committed
Added intial implementation of Parameters
Added test cases for spreadsheet parameters Added an example to show how to get an spreadsheet by id with parameters.
1 parent dc95de1 commit b2519ef

File tree

7 files changed

+293
-6
lines changed

7 files changed

+293
-6
lines changed

sheets/src/eg_sheets_api.e

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,48 @@ feature -- Spreedsheets Operations
6464
end
6565
end
6666

67-
get_from_id (a_spreadsheet_id: attached like spreadsheet_id): detachable like last_response.body
67+
get_from_id (a_spreadsheet_id: attached like spreadsheet_id; a_params: detachable EG_SPREADSHEET_PARAMETERS): detachable like last_response.body
68+
-- POST /spreadsheets/`a_spreadsheet_id'
69+
note
70+
EIS:"name=get.spreedsheets", "src=https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/get", "protocol=uri"
71+
require
72+
not a_spreadsheet_id.is_empty
73+
local
74+
l_file: PLAIN_TEXT_FILE
75+
l_qry_params: STRING_TABLE [STRING]
76+
do
77+
78+
logger.write_information ("get_from_id-> Now getting sheet from id:" + a_spreadsheet_id)
79+
80+
api_get_call (sheets_url ("spreadsheets/" + a_spreadsheet_id, Void), a_params)
81+
check
82+
attached last_response as l_response and then
83+
attached l_response.body as l_body
84+
then
85+
parse_last_response
86+
if l_response.status = {HTTP_STATUS_CODE}.ok then
87+
Result := l_body
88+
89+
debug
90+
create l_file.make_create_read_write ("/tmp/hitme_sheet_json-get_from_id.json")
91+
logger.write_information ("get_from_id->Writing body into " + l_file.path.utf_8_name)
92+
l_file.close
93+
l_file.wipe_out
94+
l_file.open_append
95+
96+
l_file.put_string (l_body)
97+
l_file.close
98+
end
99+
elseif l_response.status = {HTTP_STATUS_CODE}.not_found then
100+
logger.write_error ("get_from_id-> Not found:" + l_response.status.out + " %NBody: " + l_body)
101+
else
102+
logger.write_error ("get_from_id-> Status code invalid:" + l_response.status.out + " %NBody: " + l_body)
103+
end
104+
end
105+
end
106+
107+
108+
get_from_id2 (a_spreadsheet_id: attached like spreadsheet_id): detachable like last_response.body
68109
-- POST /spreadsheets/`a_spreadsheet_id'
69110
note
70111
EIS:"name=get.spreedsheets", "src=https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/get", "protocol=uri"

sheets/src/objects/eg_style.e

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,6 @@ feature -- Status Report
150150
Result := value = double
151151
end
152152

153-
154153
is_valid_value (a_value: INTEGER): BOOLEAN
155154
-- Can `a_value' be used in a `set_value' feature call?
156155
do
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
note
2+
description: "Summary description for {EG_SPREADSHEET_PARAM}."
3+
date: "$Date$"
4+
revision: "$Revision$"
5+
EIS: "name=", "src=https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/get#query-parameters", "protocol=uri"
6+
class
7+
EG_SPREADSHEET_PARAMETERS
8+
9+
inherit
10+
11+
EG_STANDARD_PARAMETERS
12+
13+
14+
create
15+
make, make_equal, make_caseless, make_equal_caseless
16+
17+
feature -- Access
18+
19+
include_grid_data (a_val: BOOLEAN)
20+
do
21+
force (a_val.out, "includeGridData")
22+
end
23+
24+
include_ranges (a_ranges: detachable LIST [STRING])
25+
-- Each range in the list should look like
26+
-- Sheet1!A:B check range definition.
27+
local
28+
ranges: STRING
29+
s: STRING
30+
do
31+
s := (create{URL_ENCODER}).encoded_string ("Sheet1!A1:B5")
32+
if attached a_ranges then
33+
create ranges.make_empty
34+
across a_ranges as ic loop
35+
ranges.append (ic.item)
36+
ranges.append_character (',')
37+
end
38+
ranges.remove_tail (1)
39+
force (ranges, "ranges")
40+
end
41+
end
42+
43+
end
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
note
2+
description: "Query parameters that apply to all Google Sheets API operations are documented at System Parameters. "
3+
date: "$Date$"
4+
revision: "$Revision$"
5+
EIS: "name=", "src=https://developers.google.com/sheets/api/query-parameters", "protocol=uri"
6+
EIS: "name=", "src=https://cloud.google.com/apis/docs/system-parameters", "protocl=uri"
7+
8+
class
9+
EG_STANDARD_PARAMETERS
10+
11+
inherit
12+
13+
STRING_TABLE [STRING]
14+
15+
create
16+
make, make_equal, make_caseless, make_equal_caseless
17+
18+
feature -- Access
19+
20+
fields: detachable STRING
21+
-- FieldMask(google.protobuf.FieldMask) used for response filtering. If empty, all fields will be returned.
22+
23+
include_fields
24+
do
25+
if attached fields as l_fields then
26+
force (l_fields, "fields")
27+
else
28+
force ("", "fields")
29+
end
30+
end
31+
32+
include_pretty_print (a_val: BOOLEAN)
33+
-- Pretty-print JSON response. Supported values are true (default), false.
34+
do
35+
force (a_val.out, "prettyPrint")
36+
end
37+
38+
feature -- Element Change
39+
40+
add_fields (a_val: STRING)
41+
-- Add a value `a_val` to field mask to filter response.
42+
local
43+
l_fields: STRING
44+
do
45+
l_fields := fields
46+
if l_fields /= Void then
47+
l_fields.append_character (',')
48+
l_fields.append (a_val)
49+
else
50+
create l_fields.make_empty
51+
l_fields.append (a_val)
52+
end
53+
fields := l_fields
54+
end
55+
56+
end

sheets/test/test.ecf

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
<debug name="test_create_sheet" enabled="true"/>
3232
</option>
3333
<setting name="total_order_on_reals" value="true"/>
34+
<library name="testing" location="$ISE_LIBRARY\library\testing\testing-safe.ecf"/>
3435
<cluster name="test" location=".\" recursive="true"/>
3536
</target>
3637
</system>
Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
note
2+
description: "[
3+
Eiffel tests that can be executed by testing tool.
4+
]"
5+
author: "EiffelStudio test wizard"
6+
date: "$Date$"
7+
revision: "$Revision$"
8+
testing: "type/manual"
9+
10+
class
11+
TEST_EG_SPREADSHEET_PARAMETERS
12+
13+
inherit
14+
EQA_TEST_SET
15+
16+
feature -- Test routines
17+
18+
test_get_spreadsheets_parameters_empty
19+
-- New test routine
20+
local
21+
l_qry: EG_SPREADSHEET_PARAMETERS
22+
do
23+
create l_qry.make (1)
24+
assert ("Empty", to_query (l_qry).is_empty)
25+
end
26+
27+
test_get_spreadsheets_parameters_one_fields
28+
-- New test routine
29+
local
30+
l_qry: EG_SPREADSHEET_PARAMETERS
31+
do
32+
create l_qry.make (1)
33+
l_qry.add_fields ("sheets.data")
34+
l_qry.include_fields
35+
assert ("fields", to_query (l_qry).is_case_insensitive_equal ("fields=sheets.data"))
36+
end
37+
38+
test_get_spreadsheets_parameters_multiple_fields
39+
-- New test routine
40+
local
41+
l_qry: EG_SPREADSHEET_PARAMETERS
42+
do
43+
create l_qry.make (1)
44+
l_qry.add_fields ("sheets.data")
45+
l_qry.add_fields ("properties.title")
46+
l_qry.add_fields ("sheets.properties")
47+
l_qry.include_fields
48+
assert ("fields", to_query (l_qry).is_case_insensitive_equal ("fields=sheets.data,properties.title,sheets.properties"))
49+
end
50+
51+
52+
test_get_spreadsheets_parameters_includegriddata_false
53+
-- New test routine
54+
local
55+
l_qry: EG_SPREADSHEET_PARAMETERS
56+
do
57+
create l_qry.make (1)
58+
l_qry.include_grid_data (False)
59+
assert ("includeGridData", to_query (l_qry).is_case_insensitive_equal ("includeGridData=False"))
60+
end
61+
62+
test_get_spreadsheets_parameters_includegriddata_true
63+
-- New test routine
64+
local
65+
l_qry: EG_SPREADSHEET_PARAMETERS
66+
do
67+
create l_qry.make (1)
68+
l_qry.include_grid_data (True)
69+
assert ("includeGridData", to_query (l_qry).is_case_insensitive_equal ("includeGridData=True"))
70+
end
71+
72+
73+
test_get_spreadsheets_parameters_range
74+
-- New test routine
75+
local
76+
l_qry: EG_SPREADSHEET_PARAMETERS
77+
s: STRING
78+
do
79+
create l_qry.make (1)
80+
l_qry.include_ranges (create {ARRAYED_LIST[STRING]}.make_from_array ({ARRAY[STRING]}<<"Sheet1!A1:B2">>))
81+
assert ("includeGridData", to_query (l_qry).is_case_insensitive_equal ("ranges=Sheet1!A1:B2"))
82+
end
83+
84+
85+
86+
feature -- To Query
87+
88+
to_query (a_qry: EG_SPREADSHEET_PARAMETERS): STRING
89+
do
90+
create Result.make_empty
91+
from
92+
a_qry.start
93+
until
94+
a_qry.after
95+
loop
96+
Result.append_string_general (a_qry.key_for_iteration)
97+
Result.append_character ('=')
98+
Result.append_string_general (a_qry.item_for_iteration)
99+
Result.append_character ('&')
100+
a_qry.forth
101+
end
102+
Result.remove_tail (1)
103+
end
104+
105+
end
106+
107+

sheets/test/test_sheets_api.e

Lines changed: 44 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,11 @@ feature -- {NONE}
2121

2222
set_from_json_credentials_file_path (create {PATH}.make_from_string (CREDENTIALS_PATH))
2323
retrieve_access_token
24-
test_create_sheet
25-
-- test_get_sheet ("1v1N4nRa6mmLcP9rUuyQPiCnLuUcBQFDEC7E0CDg3ASI")
24+
-- test_create_sheet
25+
-- test_get_sheet ("1j5CTkpgOc6Y5qgYdA_klZYjNhmN2KYocoZAdM4Y61tw")
26+
test_get_sheet_with_params_range ("1j5CTkpgOc6Y5qgYdA_klZYjNhmN2KYocoZAdM4Y61tw")
2627
-- test_append_sheet ("19cKCmQBWJoMePX0Iy6LueHRw0sS2bMcyP1Auzbkvj6M") --pg
27-
--test_append_sheet ("1j5CTkpgOc6Y5qgYdA_klZYjNhmN2KYocoZAdM4Y61tw") --jv
28+
-- test_append_sheet ("1j5CTkpgOc6Y5qgYdA_klZYjNhmN2KYocoZAdM4Y61tw") --jv
2829

2930
-- set_from_json_credentials_file_path (create {PATH}.make_from_string (CREDENTIALS_PATH))
3031
-- retrieve_access_token
@@ -77,7 +78,46 @@ feature -- Tests
7778
l_esapi: EG_SHEETS_API
7879
do
7980
create l_esapi.make (last_token.token)
80-
if attached l_esapi.get_from_id (an_id) as l_spreedsheet_get_result then
81+
if attached l_esapi.get_from_id2 (an_id) as l_spreedsheet_get_result then
82+
if l_esapi.has_error then
83+
-- debug ("test_create_sheet")
84+
print ("test_create_sheet-> Error %N" )
85+
print ("test_create_sheet-> Error: msg:" + l_esapi.error_message)
86+
print ("test_create_sheet-> See codes here: https://developers.google.com/maps-booking/reference/rest-api-v3/status_codes")
87+
print ("%N")
88+
-- end
89+
check
90+
cannot_create_the_spreedsheet: False
91+
end
92+
else
93+
check Json_Field_spreadsheetId: l_spreedsheet_get_result.has_substring ("spreadsheetId") end
94+
check Json_Field_properties: l_spreedsheet_get_result.has_substring ("properties") end
95+
check Json_Field_sheets: l_spreedsheet_get_result.has_substring ("sheets") end
96+
check Json_Field_spreadsheetUrl: l_spreedsheet_get_result.has_substring ("spreadsheetUrl") end
97+
-- developerMetadata and namedRanges are optional.
98+
-- debug ("test_create_sheet")
99+
logger.write_debug ("test_get_sheet-> success. Result:%N")
100+
logger.write_debug (l_spreedsheet_get_result + "%N")
101+
logger.write_debug ("test_get_sheet-> success. ")
102+
-- end
103+
end
104+
else
105+
-- Bad scope. no connection, etc
106+
check Unexptected_Behavior: False end
107+
end
108+
end
109+
110+
test_get_sheet_with_params_range (an_id: attached like {EG_SHEETS_API}.spreadsheet_id)
111+
local
112+
l_esapi: EG_SHEETS_API
113+
l_qry: EG_SPREADSHEET_PARAMETERS
114+
115+
do
116+
create l_qry.make (1)
117+
l_qry.include_ranges (create {ARRAYED_LIST [STRING]}.make_from_array (<<"Sheet1!A1:B1">>))
118+
l_qry.include_grid_data (True)
119+
create l_esapi.make (last_token.token)
120+
if attached l_esapi.get_from_id (an_id, l_qry) as l_spreedsheet_get_result then
81121
if l_esapi.has_error then
82122
-- debug ("test_create_sheet")
83123
print ("test_create_sheet-> Error %N" )

0 commit comments

Comments
 (0)