Skip to content

Commit

Permalink
Add V3-RC validation (#104)
Browse files Browse the repository at this point in the history
* Git ignore for schemas subtree

Signed-off-by: Tom <1955774+tdelmas@users.noreply.github.com>

* Squashed 'gbfs-validator/versions/schemas/' changes from 5273f96..22b058d

22b058d fix: incorrect spec for "languages" property in system_information.json (#90)
e9d891b Refer to later versions in gbfs_versions.json (#87)
fbd3ced Add v3.0 to v3.0-RC schemas (#88)
ef0d9a6 Fix schemas for v3.0-RC (#85)
2b6ad1e FIX: replaces name field with localized string (#82)
abe71f2 Fix invalid json, no trailing commas (#83)
f43170e V3.0-RC Schemas  (#79)
680df70 Update pr-to-project.yml
c2c30a2 Typo fix in geofencing_zones.json (#78)
c9be765 Create pr-to-project.yml
0a17875 Create issues-to-project.yml
30e5a3a Update README.md

git-subtree-dir: gbfs-validator/versions/schemas
git-subtree-split: 22b058dc4a358baf451e006cde74775075929b3d

* remove dot files in schemas

Signed-off-by: Tom <1955774+tdelmas@users.noreply.github.com>

* v3-RC validation

Signed-off-by: Tom <1955774+tdelmas@users.noreply.github.com>

* Remove unused file

Signed-off-by: Tom <1955774+tdelmas@users.noreply.github.com>

* Add `serverOpts` required in Windows

Signed-off-by: Tom <1955774+tdelmas@users.noreply.github.com>

* Fix typo `recommended`

Signed-off-by: Tom <1955774+tdelmas@users.noreply.github.com>

* update test for 3.0-RC , 3.0 and upcoming minor versions

Signed-off-by: Tom <1955774+tdelmas@users.noreply.github.com>

* fix after rebase

Signed-off-by: Tom <1955774+tdelmas@users.noreply.github.com>

* Recommended.

Signed-off-by: Tom <1955774+tdelmas@users.noreply.github.com>

* Squashed 'gbfs-validator/versions/schemas/' changes from 22b058d..5f12243

5f12243 Patch manifest.json (#91)

git-subtree-dir: gbfs-validator/versions/schemas
git-subtree-split: 5f12243d5735a608eef697212a627b9090eea31a

---------

Signed-off-by: Tom <1955774+tdelmas@users.noreply.github.com>
  • Loading branch information
tdelmas authored Jun 29, 2023
1 parent 22d1b07 commit e3d5f08
Show file tree
Hide file tree
Showing 47 changed files with 4,398 additions and 143 deletions.
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -22,3 +22,7 @@ coverage
functions/*.zip

.env

# schemas

gbfs-validator/versions/schemas/.*
2 changes: 1 addition & 1 deletion RULES.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
This project validates feeds up to version 2.3-RC of the [JSON Schemas](https://github.com/MobilityData/gbfs-json-schema).
This project validates feeds up to version 3.0-RC of the [JSON Schemas](https://github.com/MobilityData/gbfs-json-schema).
# Files presence
The validator will flag any missing file. It will inform the user if the missing file is required or not, as per the conditions in the GBFS version that it detects.

Expand Down
207 changes: 207 additions & 0 deletions gbfs-validator/__test__/fixtures/v3.0-RC/default.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,207 @@
const fastify = require('fastify')

const version = '3.0-RC'
const last_updated = 1566224400
const last_updated_fresh = Math.floor(Date.now() / 1000) - 30

class MockRequests {
entry_points() {
return {
manifest: this.manifest,
gbfs: this.gbfs,
gbfs_versions: this.gbfs_versions,
system_information: this.system_information,
vehicle_types: this.vehicle_types,
station_status: this.station_status
}
}

manifest({ basePath }) {
return {
last_updated,
ttl: 0,
version,
data: {
datasets: [
{
system_id: 'example_berlin',
versions: [
{
version: '3.0-RC',
url: `${basePath}/gbfs.json`
}
]
}
]
}
}
}

gbfs({ basePath }) {
return {
last_updated,
ttl: 0,
version,
data: {
feeds: [
{
name: 'system_information',
url: `${basePath}/system_information.json`
},
{
name: 'vehicle_types',
url: `${basePath}/vehicle_types.json`
},
{
name: 'vehicle_status',
url: `${basePath}/vehicle_status.json`
}
]
}
}
}

gbfs_versions({ basePath }) {
return {
last_updated,
ttl: 0,
version,
data: {
versions: [
{
version: '3.0-RC',
url: `${basePath}/gbfs.json`
}
]
}
}
}

system_information() {
return {
last_updated,
ttl: 0,
version,
data: {
system_id: 'shared_bike',
languages: ['en'],
name: [
{
text: 'Shared Bike USA',
language: 'en'
}
],
timezone: 'Etc/UTC',
opening_hours: 'Mo-Su 00:00-23:59',
feed_contact_email: 'datafeed@example.com'
}
}
}

vehicle_types() {
return {
last_updated,
ttl: 0,
version,
data: {
vehicle_types: [
{
vehicle_type_id: 'biketype1',
form_factor: 'bicycle',
propulsion_type: 'human',
name: [
{
text: 'Example Basic Bike',
language: 'en'
}
],
default_reserve_time: 30,
return_type: ['any_station', 'free_floating'],
vehicle_assets: {
icon_url: 'https://www.example.com/assets/icon_bicycle.svg',
icon_url_dark:
'https://www.example.com/assets/icon_bicycle_dark.svg',
icon_last_modified: '2021-06-15'
},
default_pricing_plan_id: 'bike_plan_1',
pricing_plan_ids: ['bike_plan_1', 'bike_plan_2', 'bike_plan_3']
},
{
vehicle_type_id: 'cartype1',
form_factor: 'car',
propulsion_type: 'electric',
name: [
{
text: 'Example Electric Car',
language: 'en'
}
],
default_reserve_time: 30,
max_range_meters: 100,
return_type: ['any_station', 'free_floating'],
vehicle_assets: {
icon_url: 'https://www.example.com/assets/icon_car.svg',
icon_url_dark: 'https://www.example.com/assets/icon_car_dark.svg',
icon_last_modified: '2021-06-15'
},
default_pricing_plan_id: 'car_plan_1',
pricing_plan_ids: ['car_plan_1', 'car_plan_2', 'car_plan_3']
}
]
}
}
}

vehicle_status() {
return {
last_updated: last_updated_fresh,
ttl: 0,
version,
data: {
vehicles: [
{
vehicle_id: 'bike1',
last_reported: 1609866109,
lat: 12.345678,
lon: 56.789012,
is_reserved: false,
is_disabled: false,
vehicle_type_id: 'biketype1'
},
{
vehicle_id: 'car1',
last_reported: 1609866109,
lat: 12.345678,
lon: 56.789012,
is_reserved: false,
is_disabled: false,
vehicle_type_id: 'cartype1',
current_range_meters: 10
}
]
}
}
}

build() {
const app = fastify()

const data = this.entry_points()

const keys = Object.keys(data)

for (const key of keys) {
app.get(`/${key}.json`, async function(request) {
const basePath = `http://${request.hostname}`

return data[key]({ request, basePath })
})
}

return app
}
}

module.exports = {
MockRequests
}
Loading

0 comments on commit e3d5f08

Please sign in to comment.