Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
1
Merge Requests
1
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
gitlab-ce
Commits
9aaa6c3f
Commit
9aaa6c3f
authored
Mar 12, 2019
by
Rémy Coutable
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Reduce diff with EE in spec/fixtures/api/schemas
Signed-off-by:
Rémy Coutable
<
remy@rymai.me
>
parent
26c6b7fc
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
152 additions
and
139 deletions
+152
-139
spec/fixtures/api/schemas/board.json
spec/fixtures/api/schemas/board.json
+1
-2
spec/fixtures/api/schemas/entities/issue.json
spec/fixtures/api/schemas/entities/issue.json
+1
-2
spec/fixtures/api/schemas/entities/issue_boards.json
spec/fixtures/api/schemas/entities/issue_boards.json
+1
-2
spec/fixtures/api/schemas/entities/merge_request_widget.json
spec/fixtures/api/schemas/entities/merge_request_widget.json
+2
-2
spec/fixtures/api/schemas/issue.json
spec/fixtures/api/schemas/issue.json
+2
-3
spec/fixtures/api/schemas/issues.json
spec/fixtures/api/schemas/issues.json
+1
-2
spec/fixtures/api/schemas/public_api/v4/merge_request.json
spec/fixtures/api/schemas/public_api/v4/merge_request.json
+124
-0
spec/fixtures/api/schemas/public_api/v4/merge_requests.json
spec/fixtures/api/schemas/public_api/v4/merge_requests.json
+1
-121
spec/support/api/schema_matcher.rb
spec/support/api/schema_matcher.rb
+19
-5
No files found.
spec/fixtures/api/schemas/board.json
View file @
9aaa6c3f
...
...
@@ -6,6 +6,5 @@
"properties"
:
{
"id"
:
{
"type"
:
"integer"
},
"name"
:
{
"type"
:
"string"
}
},
"additionalProperties"
:
false
}
}
spec/fixtures/api/schemas/entities/issue.json
View file @
9aaa6c3f
...
...
@@ -38,6 +38,5 @@
"items"
:
{
"$ref"
:
"label.json"
}
},
"assignees"
:
{
"type"
:
[
"array"
,
"null"
]
}
},
"additionalProperties"
:
false
}
}
spec/fixtures/api/schemas/entities/issue_boards.json
View file @
9aaa6c3f
...
...
@@ -10,6 +10,5 @@
"items"
:
{
"$ref"
:
"issue_board.json"
}
},
"size"
:
{
"type"
:
"integer"
}
},
"additionalProperties"
:
false
}
}
spec/fixtures/api/schemas/entities/merge_request_widget.json
View file @
9aaa6c3f
...
...
@@ -52,6 +52,7 @@
"mergeable_discussions_state"
:
{
"type"
:
"boolean"
},
"conflicts_can_be_resolved_in_ui"
:
{
"type"
:
"boolean"
},
"branch_missing"
:
{
"type"
:
"boolean"
},
"commits_count"
:
{
"type"
:
[
"integer"
,
"null"
]
},
"has_conflicts"
:
{
"type"
:
"boolean"
},
"can_be_merged"
:
{
"type"
:
"boolean"
},
"mergeable"
:
{
"type"
:
"boolean"
},
...
...
@@ -125,6 +126,5 @@
"can_receive_suggestion"
:
{
"type"
:
"boolean"
},
"source_branch_protected"
:
{
"type"
:
"boolean"
},
"conflicts_docs_path"
:
{
"type"
:
[
"string"
,
"null"
]
}
},
"additionalProperties"
:
false
}
}
spec/fixtures/api/schemas/issue.json
View file @
9aaa6c3f
...
...
@@ -28,7 +28,7 @@
"items"
:
{
"$ref"
:
"entities/label.json"
}
},
"assignee"
:
{
"id"
:
{
"type"
:
"intege
t
"
},
"id"
:
{
"type"
:
"intege
r
"
},
"name"
:
{
"type"
:
"string"
},
"username"
:
{
"type"
:
"string"
},
"avatar_url"
:
{
"type"
:
"uri"
}
...
...
@@ -52,6 +52,5 @@
}
},
"subscribed"
:
{
"type"
:
[
"boolean"
,
"null"
]
}
},
"additionalProperties"
:
false
}
}
spec/fixtures/api/schemas/issues.json
View file @
9aaa6c3f
...
...
@@ -10,6 +10,5 @@
"items"
:
{
"$ref"
:
"issue.json"
}
},
"size"
:
{
"type"
:
"integer"
}
},
"additionalProperties"
:
false
}
}
spec/fixtures/api/schemas/public_api/v4/merge_request.json
0 → 100644
View file @
9aaa6c3f
{
"type"
:
"object"
,
"properties"
:
{
"properties"
:
{
"id"
:
{
"type"
:
"integer"
},
"iid"
:
{
"type"
:
"integer"
},
"project_id"
:
{
"type"
:
"integer"
},
"title"
:
{
"type"
:
"string"
},
"description"
:
{
"type"
:
[
"string"
,
"null"
]
},
"state"
:
{
"type"
:
"string"
},
"merged_by"
:
{
"type"
:
[
"object"
,
"null"
],
"properties"
:
{
"name"
:
{
"type"
:
"string"
},
"username"
:
{
"type"
:
"string"
},
"id"
:
{
"type"
:
"integer"
},
"state"
:
{
"type"
:
"string"
},
"avatar_url"
:
{
"type"
:
"uri"
},
"web_url"
:
{
"type"
:
"uri"
}
},
"additionalProperties"
:
false
},
"merged_at"
:
{
"type"
:
[
"date"
,
"null"
]
},
"closed_by"
:
{
"type"
:
[
"object"
,
"null"
],
"properties"
:
{
"name"
:
{
"type"
:
"string"
},
"username"
:
{
"type"
:
"string"
},
"id"
:
{
"type"
:
"integer"
},
"state"
:
{
"type"
:
"string"
},
"avatar_url"
:
{
"type"
:
"uri"
},
"web_url"
:
{
"type"
:
"uri"
}
},
"additionalProperties"
:
false
},
"closed_at"
:
{
"type"
:
[
"date"
,
"null"
]
},
"created_at"
:
{
"type"
:
"date"
},
"updated_at"
:
{
"type"
:
"date"
},
"target_branch"
:
{
"type"
:
"string"
},
"source_branch"
:
{
"type"
:
"string"
},
"upvotes"
:
{
"type"
:
"integer"
},
"downvotes"
:
{
"type"
:
"integer"
},
"author"
:
{
"type"
:
"object"
,
"properties"
:
{
"name"
:
{
"type"
:
"string"
},
"username"
:
{
"type"
:
"string"
},
"id"
:
{
"type"
:
"integer"
},
"state"
:
{
"type"
:
"string"
},
"avatar_url"
:
{
"type"
:
"uri"
},
"web_url"
:
{
"type"
:
"uri"
}
},
"additionalProperties"
:
false
},
"assignee"
:
{
"type"
:
[
"object"
,
"null"
],
"properties"
:
{
"name"
:
{
"type"
:
"string"
},
"username"
:
{
"type"
:
"string"
},
"id"
:
{
"type"
:
"integer"
},
"state"
:
{
"type"
:
"string"
},
"avatar_url"
:
{
"type"
:
"uri"
},
"web_url"
:
{
"type"
:
"uri"
}
},
"additionalProperties"
:
false
},
"source_project_id"
:
{
"type"
:
"integer"
},
"target_project_id"
:
{
"type"
:
"integer"
},
"labels"
:
{
"type"
:
"array"
,
"items"
:
{
"type"
:
"string"
}
},
"work_in_progress"
:
{
"type"
:
"boolean"
},
"milestone"
:
{
"type"
:
[
"object"
,
"null"
],
"properties"
:
{
"id"
:
{
"type"
:
"integer"
},
"iid"
:
{
"type"
:
"integer"
},
"project_id"
:
{
"type"
:
[
"integer"
,
"null"
]
},
"group_id"
:
{
"type"
:
[
"integer"
,
"null"
]
},
"title"
:
{
"type"
:
"string"
},
"description"
:
{
"type"
:
[
"string"
,
"null"
]
},
"state"
:
{
"type"
:
"string"
},
"created_at"
:
{
"type"
:
"date"
},
"updated_at"
:
{
"type"
:
"date"
},
"due_date"
:
{
"type"
:
"date"
},
"start_date"
:
{
"type"
:
"date"
}
},
"additionalProperties"
:
false
},
"merge_when_pipeline_succeeds"
:
{
"type"
:
"boolean"
},
"merge_status"
:
{
"type"
:
"string"
},
"sha"
:
{
"type"
:
"string"
},
"merge_commit_sha"
:
{
"type"
:
[
"string"
,
"null"
]
},
"user_notes_count"
:
{
"type"
:
"integer"
},
"changes_count"
:
{
"type"
:
"string"
},
"should_remove_source_branch"
:
{
"type"
:
[
"boolean"
,
"null"
]
},
"force_remove_source_branch"
:
{
"type"
:
[
"boolean"
,
"null"
]
},
"discussion_locked"
:
{
"type"
:
[
"boolean"
,
"null"
]
},
"web_url"
:
{
"type"
:
"uri"
},
"squash"
:
{
"type"
:
"boolean"
},
"time_stats"
:
{
"time_estimate"
:
{
"type"
:
"integer"
},
"total_time_spent"
:
{
"type"
:
"integer"
},
"human_time_estimate"
:
{
"type"
:
[
"string"
,
"null"
]
},
"human_total_time_spent"
:
{
"type"
:
[
"string"
,
"null"
]
}
},
"allow_collaboration"
:
{
"type"
:
[
"boolean"
,
"null"
]
},
"allow_maintainer_to_push"
:
{
"type"
:
[
"boolean"
,
"null"
]
}
},
"required"
:
[
"id"
,
"iid"
,
"project_id"
,
"title"
,
"description"
,
"state"
,
"created_at"
,
"updated_at"
,
"target_branch"
,
"source_branch"
,
"upvotes"
,
"downvotes"
,
"author"
,
"assignee"
,
"source_project_id"
,
"target_project_id"
,
"labels"
,
"work_in_progress"
,
"milestone"
,
"merge_when_pipeline_succeeds"
,
"merge_status"
,
"sha"
,
"merge_commit_sha"
,
"user_notes_count"
,
"should_remove_source_branch"
,
"force_remove_source_branch"
,
"web_url"
,
"squash"
]
}
}
spec/fixtures/api/schemas/public_api/v4/merge_requests.json
View file @
9aaa6c3f
{
"type"
:
"array"
,
"items"
:
{
"type"
:
"object"
,
"properties"
:
{
"id"
:
{
"type"
:
"integer"
},
"iid"
:
{
"type"
:
"integer"
},
"project_id"
:
{
"type"
:
"integer"
},
"title"
:
{
"type"
:
"string"
},
"description"
:
{
"type"
:
[
"string"
,
"null"
]
},
"state"
:
{
"type"
:
"string"
},
"merged_by"
:
{
"type"
:
[
"object"
,
"null"
],
"properties"
:
{
"name"
:
{
"type"
:
"string"
},
"username"
:
{
"type"
:
"string"
},
"id"
:
{
"type"
:
"integer"
},
"state"
:
{
"type"
:
"string"
},
"avatar_url"
:
{
"type"
:
"uri"
},
"web_url"
:
{
"type"
:
"uri"
}
},
"additionalProperties"
:
false
},
"merged_at"
:
{
"type"
:
[
"date"
,
"null"
]
},
"closed_by"
:
{
"type"
:
[
"object"
,
"null"
],
"properties"
:
{
"name"
:
{
"type"
:
"string"
},
"username"
:
{
"type"
:
"string"
},
"id"
:
{
"type"
:
"integer"
},
"state"
:
{
"type"
:
"string"
},
"avatar_url"
:
{
"type"
:
"uri"
},
"web_url"
:
{
"type"
:
"uri"
}
},
"additionalProperties"
:
false
},
"closed_at"
:
{
"type"
:
[
"date"
,
"null"
]
},
"created_at"
:
{
"type"
:
"date"
},
"updated_at"
:
{
"type"
:
"date"
},
"target_branch"
:
{
"type"
:
"string"
},
"source_branch"
:
{
"type"
:
"string"
},
"upvotes"
:
{
"type"
:
"integer"
},
"downvotes"
:
{
"type"
:
"integer"
},
"author"
:
{
"type"
:
"object"
,
"properties"
:
{
"name"
:
{
"type"
:
"string"
},
"username"
:
{
"type"
:
"string"
},
"id"
:
{
"type"
:
"integer"
},
"state"
:
{
"type"
:
"string"
},
"avatar_url"
:
{
"type"
:
"uri"
},
"web_url"
:
{
"type"
:
"uri"
}
},
"additionalProperties"
:
false
},
"assignee"
:
{
"type"
:
[
"object"
,
"null"
],
"properties"
:
{
"name"
:
{
"type"
:
"string"
},
"username"
:
{
"type"
:
"string"
},
"id"
:
{
"type"
:
"integer"
},
"state"
:
{
"type"
:
"string"
},
"avatar_url"
:
{
"type"
:
"uri"
},
"web_url"
:
{
"type"
:
"uri"
}
},
"additionalProperties"
:
false
},
"source_project_id"
:
{
"type"
:
"integer"
},
"target_project_id"
:
{
"type"
:
"integer"
},
"labels"
:
{
"type"
:
"array"
,
"items"
:
{
"type"
:
"string"
}
},
"work_in_progress"
:
{
"type"
:
"boolean"
},
"milestone"
:
{
"type"
:
[
"object"
,
"null"
],
"properties"
:
{
"id"
:
{
"type"
:
"integer"
},
"iid"
:
{
"type"
:
"integer"
},
"project_id"
:
{
"type"
:
[
"integer"
,
"null"
]
},
"group_id"
:
{
"type"
:
[
"integer"
,
"null"
]
},
"title"
:
{
"type"
:
"string"
},
"description"
:
{
"type"
:
[
"string"
,
"null"
]
},
"state"
:
{
"type"
:
"string"
},
"created_at"
:
{
"type"
:
"date"
},
"updated_at"
:
{
"type"
:
"date"
},
"due_date"
:
{
"type"
:
"date"
},
"start_date"
:
{
"type"
:
"date"
}
},
"additionalProperties"
:
false
},
"merge_when_pipeline_succeeds"
:
{
"type"
:
"boolean"
},
"merge_status"
:
{
"type"
:
"string"
},
"sha"
:
{
"type"
:
"string"
},
"merge_commit_sha"
:
{
"type"
:
[
"string"
,
"null"
]
},
"user_notes_count"
:
{
"type"
:
"integer"
},
"changes_count"
:
{
"type"
:
"string"
},
"should_remove_source_branch"
:
{
"type"
:
[
"boolean"
,
"null"
]
},
"force_remove_source_branch"
:
{
"type"
:
[
"boolean"
,
"null"
]
},
"discussion_locked"
:
{
"type"
:
[
"boolean"
,
"null"
]
},
"web_url"
:
{
"type"
:
"uri"
},
"squash"
:
{
"type"
:
"boolean"
},
"time_stats"
:
{
"time_estimate"
:
{
"type"
:
"integer"
},
"total_time_spent"
:
{
"type"
:
"integer"
},
"human_time_estimate"
:
{
"type"
:
[
"string"
,
"null"
]
},
"human_total_time_spent"
:
{
"type"
:
[
"string"
,
"null"
]
}
},
"allow_collaboration"
:
{
"type"
:
[
"boolean"
,
"null"
]
},
"allow_maintainer_to_push"
:
{
"type"
:
[
"boolean"
,
"null"
]
}
},
"required"
:
[
"id"
,
"iid"
,
"project_id"
,
"title"
,
"description"
,
"state"
,
"created_at"
,
"updated_at"
,
"target_branch"
,
"source_branch"
,
"upvotes"
,
"downvotes"
,
"author"
,
"assignee"
,
"source_project_id"
,
"target_project_id"
,
"labels"
,
"work_in_progress"
,
"milestone"
,
"merge_when_pipeline_succeeds"
,
"merge_status"
,
"sha"
,
"merge_commit_sha"
,
"user_notes_count"
,
"should_remove_source_branch"
,
"force_remove_source_branch"
,
"web_url"
,
"squash"
],
"additionalProperties"
:
false
"$ref"
:
"./merge_request.json"
}
}
spec/support/api/schema_matcher.rb
View file @
9aaa6c3f
module
SchemaPath
def
self
.
expand
(
schema
,
dir
=
''
)
Rails
.
root
.
join
(
dir
,
'spec'
,
"fixtures/api/schemas/
#{
schema
}
.json"
).
to_s
def
self
.
expand
(
schema
,
dir
=
nil
)
if
Gitlab
.
ee?
&&
dir
.
nil?
ee_path
=
expand
(
schema
,
'ee'
)
return
ee_path
if
File
.
exist?
(
ee_path
)
end
Rails
.
root
.
join
(
dir
.
to_s
,
'spec'
,
"fixtures/api/schemas/
#{
schema
}
.json"
).
to_s
end
end
RSpec
::
Matchers
.
define
:match_response_schema
do
|
schema
,
dir:
''
,
**
options
|
RSpec
::
Matchers
.
define
:match_response_schema
do
|
schema
,
dir:
nil
,
**
options
|
match
do
|
response
|
@errors
=
JSON
::
Validator
.
fully_validate
(
SchemaPath
.
expand
(
schema
,
dir
),
response
.
body
,
options
)
...
...
@@ -18,8 +24,16 @@ RSpec::Matchers.define :match_response_schema do |schema, dir: '', **options|
end
end
RSpec
::
Matchers
.
define
:match_schema
do
|
schema
,
dir:
''
,
**
options
|
RSpec
::
Matchers
.
define
:match_schema
do
|
schema
,
dir:
nil
,
**
options
|
match
do
|
data
|
JSON
::
Validator
.
validate!
(
SchemaPath
.
expand
(
schema
,
dir
),
data
,
options
)
@errors
=
JSON
::
Validator
.
fully_validate
(
SchemaPath
.
expand
(
schema
,
dir
),
data
,
options
)
@errors
.
empty?
end
failure_message
do
|
response
|
"didn't match the schema defined by
#{
SchemaPath
.
expand
(
schema
,
dir
)
}
"
\
" The validation errors were:
\n
#{
@errors
.
join
(
"
\n
"
)
}
"
end
end
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment