youtrack 0.0.8 → 0.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.envrc +1 -0
- data/.gitignore +1 -0
- data/README.md +1 -0
- data/features/support/env.rb +0 -26
- data/features/support/hooks.rb +0 -3
- data/features/support/vcr.rb +16 -0
- data/features/support/world.rb +0 -1
- data/lib/youtrack.rb +1 -0
- data/lib/youtrack/client.rb +10 -2
- data/lib/youtrack/resources/base.rb +1 -0
- data/lib/youtrack/resources/issue.rb +12 -4
- data/lib/youtrack/resources/project.rb +1 -1
- data/lib/youtrack/resources/tag.rb +52 -0
- data/lib/youtrack/version.rb +1 -1
- data/spec/cassettes/client/connect.yml +40 -0
- data/spec/cassettes/client/connect_credentials_error.yml +39 -0
- data/spec/cassettes/client/connect_url_error.yml +45 -0
- data/spec/cassettes/users/current.yml +75 -0
- data/spec/cassettes/users/get_by_login.yml +75 -0
- data/spec/cassettes/users/get_saved_searches_for.yml +76 -0
- data/spec/spec_helper.rb +19 -0
- data/spec/youtrack/client_spec.rb +64 -1
- data/spec/youtrack/resources/user_spec.rb +69 -14
- data/youtrack.gemspec +5 -1
- metadata +32 -16
- data/examples/authentication.rb +0 -12
- data/examples/issues.rb +0 -53
- data/examples/projects.rb +0 -48
- data/examples/users.rb +0 -0
- data/features/client/new_client_session.feature +0 -19
- data/features/step_definitions/client/client_steps.rb +0 -46
- data/spec/fixtures/login_body_error.xml +0 -1
- data/spec/fixtures/login_body_ok.xml +0 -1
- data/spec/fixtures/login_header.json +0 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 34b0cfe1c85c133c97760e028aa473f91b6cc488
|
4
|
+
data.tar.gz: 572a1ca3ceb3344a48f942c2bad07eca3e6927ee
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 63ea5521cde76e24d6e797cf472384fb6ad64fa3d0a3e0ac6f3c3fd6f676090773b6200c4a1c926651b21c30f4b2899f3cd3cead6224c8618c9b30464c707c47
|
7
|
+
data.tar.gz: 517d918c6111abb1e4f25b90a386487008034b7074fef3da85d49b2b0b20326e689e6696c9e78cab9837eb2f583d8b247fa993345883df0f14302db017511edf
|
data/.envrc
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
export PATH=$PWD/binstubs:$PATH
|
data/.gitignore
CHANGED
data/README.md
CHANGED
data/features/support/env.rb
CHANGED
@@ -1,29 +1,3 @@
|
|
1
1
|
require "youtrack"
|
2
2
|
require "webmock"
|
3
|
-
include WebMock::API
|
4
3
|
|
5
|
-
module YServer
|
6
|
-
URL = "https://youtrackserver.com"
|
7
|
-
Endpoint = "#{URL}/rest"
|
8
|
-
Login = "root"
|
9
|
-
Lorem = 'lorem'
|
10
|
-
Password = "root"
|
11
|
-
FIXTURE_PATH = File.expand_path('../../../spec/fixtures', __FILE__ )
|
12
|
-
COOKIE = "jetbrains.charisma.main.security.PRINCIPAL=NmZkNDc3NDgxZjBhOWNjMTVjNDQwNTljNTE1NzM1ODEwM2I3MjgyMDlkZDAzZGJhYTAzYzU1ZmYyZGUyZWMxNzpyb290;Path=/youtrack;Expires=Sat, 24-Jan-2015 07:49:19 GMT"
|
13
|
-
end
|
14
|
-
|
15
|
-
def fixture(filename)
|
16
|
-
File.read(YServer::FIXTURE_PATH + "/#{filename}")
|
17
|
-
end
|
18
|
-
|
19
|
-
#=========================
|
20
|
-
# Request Stubs
|
21
|
-
#=========================
|
22
|
-
|
23
|
-
stub_request(:post, "#{YServer::Endpoint}/user/login").
|
24
|
-
with(:body => "login=#{YServer::Login}&password=#{YServer::Password}").
|
25
|
-
to_return(:status => 200, body: fixture('login_body_ok.xml'), :headers => { 'set-cookie' => YServer::COOKIE })
|
26
|
-
|
27
|
-
stub_request(:post, "#{YServer::Endpoint}/user/login").
|
28
|
-
with(:body => "login=#{YServer::Lorem}&password=#{YServer::Lorem}").
|
29
|
-
to_return(:status => 403, body: fixture('login_body_error.xml'), :headers => { 'set-cookie' => YServer::COOKIE })
|
data/features/support/hooks.rb
CHANGED
@@ -0,0 +1,16 @@
|
|
1
|
+
require "vcr"
|
2
|
+
|
3
|
+
|
4
|
+
VCR.config do |c|
|
5
|
+
|
6
|
+
# tell vcr where to store recorded responses
|
7
|
+
c.cassette_library_dir = "fixtures/cassette_library"
|
8
|
+
|
9
|
+
# use webmock for stubbing
|
10
|
+
c.hook_into :webmock
|
11
|
+
|
12
|
+
# allow local requests
|
13
|
+
c.ignore_localhost = true
|
14
|
+
|
15
|
+
c.default_cassette_options = { record: :none }
|
16
|
+
end
|
data/features/support/world.rb
CHANGED
@@ -1 +0,0 @@
|
|
1
|
-
World(YServer)
|
data/lib/youtrack.rb
CHANGED
data/lib/youtrack/client.rb
CHANGED
@@ -26,9 +26,13 @@ module Youtrack
|
|
26
26
|
true == @admin
|
27
27
|
end
|
28
28
|
|
29
|
+
# Sets debugging mode
|
30
|
+
attr_accessor :debug
|
31
|
+
|
29
32
|
def initialize(options={}, &block)
|
30
|
-
@cookies
|
31
|
-
@admin
|
33
|
+
@cookies = {}
|
34
|
+
@admin = false
|
35
|
+
@debug = false
|
32
36
|
|
33
37
|
yield(self) if block_given?
|
34
38
|
end
|
@@ -68,6 +72,10 @@ module Youtrack
|
|
68
72
|
resource(:issue).new(self)
|
69
73
|
end
|
70
74
|
|
75
|
+
def tags
|
76
|
+
resource(:tag).new(self)
|
77
|
+
end
|
78
|
+
|
71
79
|
private
|
72
80
|
|
73
81
|
def resource(resource_name)
|
@@ -16,7 +16,7 @@ module Youtrack
|
|
16
16
|
# attachments file in "multipart/form-data" format One or several files in "multipart/form-data" format that should be attached to the new issue.
|
17
17
|
# permittedGroup string Set visibility for the new issue, that is: Specify a user group to which the issue will be visible.
|
18
18
|
def create(attributes={})
|
19
|
-
put("issue",
|
19
|
+
put("issue", query: attributes)
|
20
20
|
response
|
21
21
|
end
|
22
22
|
|
@@ -61,7 +61,7 @@ module Youtrack
|
|
61
61
|
# summary string New summary for the specified issue.
|
62
62
|
# description string Updated description for the specified issue.
|
63
63
|
def update(issue_id, attributes={})
|
64
|
-
post("issue/#{issue_id}",
|
64
|
+
post("issue/#{issue_id}", query: attributes)
|
65
65
|
response.parsed_response
|
66
66
|
end
|
67
67
|
|
@@ -74,13 +74,21 @@ module Youtrack
|
|
74
74
|
url = URI.parse(join(base_url, "issue/#{issue_id}/attachment"))
|
75
75
|
req = Net::HTTP::Post::Multipart.new( url.path, "file" => UploadIO.new(data, content_type, filename))
|
76
76
|
req['Cookie'] = service.cookies['Cookie']
|
77
|
-
|
77
|
+
http = Net::HTTP.new(url.host, url.port)
|
78
|
+
http.set_debug_output($stderr) if service.debug
|
79
|
+
|
80
|
+
if url.scheme == 'https'
|
81
|
+
http.use_ssl = true
|
82
|
+
http.verify_mode = OpenSSL::SSL::VERIFY_PEER
|
83
|
+
end
|
84
|
+
|
85
|
+
response = http.request(req)
|
78
86
|
response
|
79
87
|
end
|
80
88
|
|
81
89
|
|
82
90
|
def add_comment(issue_id, attributes={})
|
83
|
-
post("issue/#{issue_id}/execute",
|
91
|
+
post("issue/#{issue_id}/execute", query: attributes)
|
84
92
|
response
|
85
93
|
end
|
86
94
|
|
@@ -40,7 +40,7 @@ module Youtrack
|
|
40
40
|
# projectLeadLogin string required Login name of a user to be assigned as a project leader.
|
41
41
|
# description string Optional description of the new project
|
42
42
|
def create(attributes={})
|
43
|
-
put("admin/project/#{attributes[:projectId]}",
|
43
|
+
put("admin/project/#{attributes[:projectId]}", query: attributes)
|
44
44
|
response
|
45
45
|
end
|
46
46
|
|
@@ -0,0 +1,52 @@
|
|
1
|
+
module Youtrack
|
2
|
+
class Tag < Base
|
3
|
+
|
4
|
+
# get all user's tags
|
5
|
+
def get_all_tags
|
6
|
+
get('user/tag')
|
7
|
+
response.parsed_response
|
8
|
+
end
|
9
|
+
|
10
|
+
# get a user's tag by name
|
11
|
+
def get_tag_by_name( tag_name )
|
12
|
+
get("user/tag/#{tag_name}")
|
13
|
+
response.parsed_response
|
14
|
+
end
|
15
|
+
|
16
|
+
# add new user's tag
|
17
|
+
#
|
18
|
+
# attributes:
|
19
|
+
# tagName (required) String The name of the new tag
|
20
|
+
# visibleForGroup (required) String Name of a user group in which tag should be visible
|
21
|
+
# updatableByGroup (required) String Name of user group whose members can edit the new tag
|
22
|
+
# untagOnResolve (optional) Boolean autoremove when issue's state changes
|
23
|
+
#
|
24
|
+
# API Success: Returns 201 Created with Location Header set
|
25
|
+
# Returns the response object
|
26
|
+
|
27
|
+
def create(attributes={})
|
28
|
+
tag_name = attributes.delete(:tagName)
|
29
|
+
put("user/tag/#{tag_name}", attributes)
|
30
|
+
response
|
31
|
+
end
|
32
|
+
|
33
|
+
# update an existing tag
|
34
|
+
#
|
35
|
+
# attributes:
|
36
|
+
# tagName (required) String The name of tag to edit.
|
37
|
+
# newName (required) String the new name for the tag.
|
38
|
+
# visibleForGroup (required) String Name of a user group in which tag should be visible
|
39
|
+
# updatableByGroup (required) String Name of user group whose members can edit the new tag
|
40
|
+
# untagOnResolve (optional) Boolean autoremove when issue's state changes
|
41
|
+
#
|
42
|
+
# API Success: Returns 301 Moved Permanently with Location Header set
|
43
|
+
# Returns the response object
|
44
|
+
|
45
|
+
def update(attributes={})
|
46
|
+
tag_name = attributes.delete(:tagName)
|
47
|
+
post("user/tag/#{tag_name}", attributes)
|
48
|
+
response
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
end
|
data/lib/youtrack/version.rb
CHANGED
@@ -0,0 +1,40 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: post
|
5
|
+
uri: https://testcloud.myjetbrains.com/youtrack/rest/user/login
|
6
|
+
body:
|
7
|
+
encoding: UTF-8
|
8
|
+
string: login=testuser&password=testuser
|
9
|
+
headers: {}
|
10
|
+
response:
|
11
|
+
status:
|
12
|
+
code: 200
|
13
|
+
message: OK
|
14
|
+
headers:
|
15
|
+
Server:
|
16
|
+
- nginx
|
17
|
+
Date:
|
18
|
+
- Fri, 07 Feb 2014 21:23:50 GMT
|
19
|
+
Content-Type:
|
20
|
+
- application/xml; charset=UTF-8
|
21
|
+
Transfer-Encoding:
|
22
|
+
- chunked
|
23
|
+
Connection:
|
24
|
+
- keep-alive
|
25
|
+
Vary:
|
26
|
+
- Accept-Encoding
|
27
|
+
Set-Cookie:
|
28
|
+
- JSESSIONID=i1nlki01vb7k2ti2k3wmizbk;Path=/youtrack;Secure
|
29
|
+
- jetbrains.charisma.main.security.PRINCIPAL=YWU1ZGViODIyZTBkNzE5OTI5MDA0NzFhNzE5OWQwZDk1YjhlN2M5ZDA1YzQwYTgyNDVhMjgxZmQyYzFkNjY4NDp0ZXN0dXNlcg;Path=/youtrack;Expires=Sat,
|
30
|
+
07-Feb-2015 21:23:50 GMT
|
31
|
+
Expires:
|
32
|
+
- Thu, 01 Jan 1970 00:00:00 GMT
|
33
|
+
Cache-Control:
|
34
|
+
- no-cache, no-store, no-transform, must-revalidate
|
35
|
+
body:
|
36
|
+
encoding: UTF-8
|
37
|
+
string: <login>ok</login>
|
38
|
+
http_version:
|
39
|
+
recorded_at: Fri, 07 Feb 2014 21:25:36 GMT
|
40
|
+
recorded_with: VCR 2.8.0
|
@@ -0,0 +1,39 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: post
|
5
|
+
uri: https://testcloud.myjetbrains.com/youtrack/rest/user/login
|
6
|
+
body:
|
7
|
+
encoding: UTF-8
|
8
|
+
string: login=invalid_user&password=invalid_pass
|
9
|
+
headers: {}
|
10
|
+
response:
|
11
|
+
status:
|
12
|
+
code: 403
|
13
|
+
message: Forbidden
|
14
|
+
headers:
|
15
|
+
Server:
|
16
|
+
- nginx
|
17
|
+
Date:
|
18
|
+
- Fri, 07 Feb 2014 21:59:44 GMT
|
19
|
+
Content-Type:
|
20
|
+
- application/xml; charset=UTF-8
|
21
|
+
Content-Length:
|
22
|
+
- '98'
|
23
|
+
Connection:
|
24
|
+
- keep-alive
|
25
|
+
Vary:
|
26
|
+
- Accept-Encoding
|
27
|
+
Set-Cookie:
|
28
|
+
- JSESSIONID=16ngfmvqeqmc912t0v7q6fo2kc;Path=/youtrack;Secure
|
29
|
+
Expires:
|
30
|
+
- Thu, 01 Jan 1970 00:00:00 GMT
|
31
|
+
Cache-Control:
|
32
|
+
- no-cache, no-store, no-transform, must-revalidate
|
33
|
+
body:
|
34
|
+
encoding: UTF-8
|
35
|
+
string: <?xml version="1.0" encoding="UTF-8" standalone="yes"?><error>Incorrect
|
36
|
+
login or password.</error>
|
37
|
+
http_version:
|
38
|
+
recorded_at: Fri, 07 Feb 2014 22:01:31 GMT
|
39
|
+
recorded_with: VCR 2.8.0
|
@@ -0,0 +1,45 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: post
|
5
|
+
uri: https://testcloud.myjetbrains.com/youtracks/rest/user/login
|
6
|
+
body:
|
7
|
+
encoding: UTF-8
|
8
|
+
string: login=testuser&password=testuser
|
9
|
+
headers: {}
|
10
|
+
response:
|
11
|
+
status:
|
12
|
+
code: 404
|
13
|
+
message: Not Found
|
14
|
+
headers:
|
15
|
+
Server:
|
16
|
+
- nginx
|
17
|
+
Date:
|
18
|
+
- Fri, 07 Feb 2014 21:59:42 GMT
|
19
|
+
Content-Type:
|
20
|
+
- text/html;charset=ISO-8859-1
|
21
|
+
Content-Length:
|
22
|
+
- '1292'
|
23
|
+
Connection:
|
24
|
+
- keep-alive
|
25
|
+
Cache-Control:
|
26
|
+
- must-revalidate,no-cache,no-store
|
27
|
+
body:
|
28
|
+
encoding: UTF-8
|
29
|
+
string: "<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=ISO-8859-1\"/>\n<title>Error
|
30
|
+
404 Not Found</title>\n</head>\n<body>\n<h2>HTTP ERROR: 404</h2>\n<p>Problem
|
31
|
+
accessing /youtracks/rest/user/login. Reason:\n<pre> Not Found</pre></p>\n<hr
|
32
|
+
/><i><small>Powered by Jetty://</small></i>\n \n
|
33
|
+
\ \n \n
|
34
|
+
\ \n \n
|
35
|
+
\ \n \n
|
36
|
+
\ \n \n
|
37
|
+
\ \n \n
|
38
|
+
\ \n \n
|
39
|
+
\ \n \n
|
40
|
+
\ \n \n
|
41
|
+
\ \n \n
|
42
|
+
\ \n</body>\n</html>\n"
|
43
|
+
http_version:
|
44
|
+
recorded_at: Fri, 07 Feb 2014 22:01:29 GMT
|
45
|
+
recorded_with: VCR 2.8.0
|
@@ -0,0 +1,75 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: post
|
5
|
+
uri: https://testcloud.myjetbrains.com/youtrack/rest/user/login
|
6
|
+
body:
|
7
|
+
encoding: UTF-8
|
8
|
+
string: login=testuser&password=testuser
|
9
|
+
headers: {}
|
10
|
+
response:
|
11
|
+
status:
|
12
|
+
code: 200
|
13
|
+
message: OK
|
14
|
+
headers:
|
15
|
+
Server:
|
16
|
+
- nginx
|
17
|
+
Date:
|
18
|
+
- Fri, 07 Feb 2014 22:39:52 GMT
|
19
|
+
Content-Type:
|
20
|
+
- application/xml; charset=UTF-8
|
21
|
+
Transfer-Encoding:
|
22
|
+
- chunked
|
23
|
+
Connection:
|
24
|
+
- keep-alive
|
25
|
+
Vary:
|
26
|
+
- Accept-Encoding
|
27
|
+
Set-Cookie:
|
28
|
+
- JSESSIONID=1x6fz1xa878jlneco9qotclw8;Path=/youtrack;Secure
|
29
|
+
- jetbrains.charisma.main.security.PRINCIPAL=YWU1ZGViODIyZTBkNzE5OTI5MDA0NzFhNzE5OWQwZDk1YjhlN2M5ZDA1YzQwYTgyNDVhMjgxZmQyYzFkNjY4NDp0ZXN0dXNlcg;Path=/youtrack;Expires=Sat,
|
30
|
+
07-Feb-2015 22:39:52 GMT
|
31
|
+
Expires:
|
32
|
+
- Thu, 01 Jan 1970 00:00:00 GMT
|
33
|
+
Cache-Control:
|
34
|
+
- no-cache, no-store, no-transform, must-revalidate
|
35
|
+
body:
|
36
|
+
encoding: UTF-8
|
37
|
+
string: <login>ok</login>
|
38
|
+
http_version:
|
39
|
+
recorded_at: Fri, 07 Feb 2014 22:41:39 GMT
|
40
|
+
- request:
|
41
|
+
method: get
|
42
|
+
uri: https://testcloud.myjetbrains.com/youtrack/rest/user/current
|
43
|
+
body:
|
44
|
+
encoding: US-ASCII
|
45
|
+
string: ''
|
46
|
+
headers:
|
47
|
+
Cookie:
|
48
|
+
- JSESSIONID=1x6fz1xa878jlneco9qotclw8;Path=/youtrack;Secure, jetbrains.charisma.main.security.PRINCIPAL=YWU1ZGViODIyZTBkNzE5OTI5MDA0NzFhNzE5OWQwZDk1YjhlN2M5ZDA1YzQwYTgyNDVhMjgxZmQyYzFkNjY4NDp0ZXN0dXNlcg;Path=/youtrack;Expires=Sat,
|
49
|
+
07-Feb-2015 22:39:52 GMT
|
50
|
+
response:
|
51
|
+
status:
|
52
|
+
code: 200
|
53
|
+
message: OK
|
54
|
+
headers:
|
55
|
+
Server:
|
56
|
+
- nginx
|
57
|
+
Date:
|
58
|
+
- Fri, 07 Feb 2014 22:41:19 GMT
|
59
|
+
Content-Type:
|
60
|
+
- application/xml; charset=UTF-8
|
61
|
+
Content-Length:
|
62
|
+
- '130'
|
63
|
+
Connection:
|
64
|
+
- keep-alive
|
65
|
+
Vary:
|
66
|
+
- Accept-Encoding
|
67
|
+
Cache-Control:
|
68
|
+
- no-cache, no-store, no-transform, must-revalidate
|
69
|
+
body:
|
70
|
+
encoding: UTF-8
|
71
|
+
string: <?xml version="1.0" encoding="UTF-8" standalone="yes"?><user login="testuser"
|
72
|
+
email="testuser@testcloud.de" fullName="Test User"/>
|
73
|
+
http_version:
|
74
|
+
recorded_at: Fri, 07 Feb 2014 22:43:05 GMT
|
75
|
+
recorded_with: VCR 2.8.0
|
@@ -0,0 +1,75 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: post
|
5
|
+
uri: https://testcloud.myjetbrains.com/youtrack/rest/user/login
|
6
|
+
body:
|
7
|
+
encoding: UTF-8
|
8
|
+
string: login=testuser&password=testuser
|
9
|
+
headers: {}
|
10
|
+
response:
|
11
|
+
status:
|
12
|
+
code: 200
|
13
|
+
message: OK
|
14
|
+
headers:
|
15
|
+
Server:
|
16
|
+
- nginx
|
17
|
+
Date:
|
18
|
+
- Fri, 07 Feb 2014 22:42:20 GMT
|
19
|
+
Content-Type:
|
20
|
+
- application/xml; charset=UTF-8
|
21
|
+
Transfer-Encoding:
|
22
|
+
- chunked
|
23
|
+
Connection:
|
24
|
+
- keep-alive
|
25
|
+
Vary:
|
26
|
+
- Accept-Encoding
|
27
|
+
Set-Cookie:
|
28
|
+
- JSESSIONID=xt1ovx8ac8acjld0v70wx33o;Path=/youtrack;Secure
|
29
|
+
- jetbrains.charisma.main.security.PRINCIPAL=YWU1ZGViODIyZTBkNzE5OTI5MDA0NzFhNzE5OWQwZDk1YjhlN2M5ZDA1YzQwYTgyNDVhMjgxZmQyYzFkNjY4NDp0ZXN0dXNlcg;Path=/youtrack;Expires=Sat,
|
30
|
+
07-Feb-2015 22:42:20 GMT
|
31
|
+
Expires:
|
32
|
+
- Thu, 01 Jan 1970 00:00:00 GMT
|
33
|
+
Cache-Control:
|
34
|
+
- no-cache, no-store, no-transform, must-revalidate
|
35
|
+
body:
|
36
|
+
encoding: UTF-8
|
37
|
+
string: <login>ok</login>
|
38
|
+
http_version:
|
39
|
+
recorded_at: Fri, 07 Feb 2014 22:44:07 GMT
|
40
|
+
- request:
|
41
|
+
method: get
|
42
|
+
uri: https://testcloud.myjetbrains.com/youtrack/rest/user/testuser
|
43
|
+
body:
|
44
|
+
encoding: US-ASCII
|
45
|
+
string: ''
|
46
|
+
headers:
|
47
|
+
Cookie:
|
48
|
+
- JSESSIONID=xt1ovx8ac8acjld0v70wx33o;Path=/youtrack;Secure, jetbrains.charisma.main.security.PRINCIPAL=YWU1ZGViODIyZTBkNzE5OTI5MDA0NzFhNzE5OWQwZDk1YjhlN2M5ZDA1YzQwYTgyNDVhMjgxZmQyYzFkNjY4NDp0ZXN0dXNlcg;Path=/youtrack;Expires=Sat,
|
49
|
+
07-Feb-2015 22:42:20 GMT
|
50
|
+
response:
|
51
|
+
status:
|
52
|
+
code: 200
|
53
|
+
message: OK
|
54
|
+
headers:
|
55
|
+
Server:
|
56
|
+
- nginx
|
57
|
+
Date:
|
58
|
+
- Fri, 07 Feb 2014 22:42:21 GMT
|
59
|
+
Content-Type:
|
60
|
+
- application/xml; charset=UTF-8
|
61
|
+
Content-Length:
|
62
|
+
- '130'
|
63
|
+
Connection:
|
64
|
+
- keep-alive
|
65
|
+
Vary:
|
66
|
+
- Accept-Encoding
|
67
|
+
Cache-Control:
|
68
|
+
- no-cache, no-store, no-transform, must-revalidate
|
69
|
+
body:
|
70
|
+
encoding: UTF-8
|
71
|
+
string: <?xml version="1.0" encoding="UTF-8" standalone="yes"?><user login="testuser"
|
72
|
+
email="testuser@testcloud.de" fullName="Test User"/>
|
73
|
+
http_version:
|
74
|
+
recorded_at: Fri, 07 Feb 2014 22:44:08 GMT
|
75
|
+
recorded_with: VCR 2.8.0
|
@@ -0,0 +1,76 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: post
|
5
|
+
uri: https://testcloud.myjetbrains.com/youtrack/rest/user/login
|
6
|
+
body:
|
7
|
+
encoding: UTF-8
|
8
|
+
string: login=testuser&password=testuser
|
9
|
+
headers: {}
|
10
|
+
response:
|
11
|
+
status:
|
12
|
+
code: 200
|
13
|
+
message: OK
|
14
|
+
headers:
|
15
|
+
Server:
|
16
|
+
- nginx
|
17
|
+
Date:
|
18
|
+
- Fri, 07 Feb 2014 22:39:55 GMT
|
19
|
+
Content-Type:
|
20
|
+
- application/xml; charset=UTF-8
|
21
|
+
Transfer-Encoding:
|
22
|
+
- chunked
|
23
|
+
Connection:
|
24
|
+
- keep-alive
|
25
|
+
Vary:
|
26
|
+
- Accept-Encoding
|
27
|
+
Set-Cookie:
|
28
|
+
- JSESSIONID=114e57my63svq68gcd6kn2821;Path=/youtrack;Secure
|
29
|
+
- jetbrains.charisma.main.security.PRINCIPAL=YWU1ZGViODIyZTBkNzE5OTI5MDA0NzFhNzE5OWQwZDk1YjhlN2M5ZDA1YzQwYTgyNDVhMjgxZmQyYzFkNjY4NDp0ZXN0dXNlcg;Path=/youtrack;Expires=Sat,
|
30
|
+
07-Feb-2015 22:39:55 GMT
|
31
|
+
Expires:
|
32
|
+
- Thu, 01 Jan 1970 00:00:00 GMT
|
33
|
+
Cache-Control:
|
34
|
+
- no-cache, no-store, no-transform, must-revalidate
|
35
|
+
body:
|
36
|
+
encoding: UTF-8
|
37
|
+
string: <login>ok</login>
|
38
|
+
http_version:
|
39
|
+
recorded_at: Fri, 07 Feb 2014 22:41:41 GMT
|
40
|
+
- request:
|
41
|
+
method: get
|
42
|
+
uri: https://testcloud.myjetbrains.com/youtrack/rest/user/testuser/filter
|
43
|
+
body:
|
44
|
+
encoding: US-ASCII
|
45
|
+
string: ''
|
46
|
+
headers:
|
47
|
+
Cookie:
|
48
|
+
- JSESSIONID=114e57my63svq68gcd6kn2821;Path=/youtrack;Secure, jetbrains.charisma.main.security.PRINCIPAL=YWU1ZGViODIyZTBkNzE5OTI5MDA0NzFhNzE5OWQwZDk1YjhlN2M5ZDA1YzQwYTgyNDVhMjgxZmQyYzFkNjY4NDp0ZXN0dXNlcg;Path=/youtrack;Expires=Sat,
|
49
|
+
07-Feb-2015 22:39:55 GMT
|
50
|
+
response:
|
51
|
+
status:
|
52
|
+
code: 200
|
53
|
+
message: OK
|
54
|
+
headers:
|
55
|
+
Server:
|
56
|
+
- nginx
|
57
|
+
Date:
|
58
|
+
- Fri, 07 Feb 2014 22:41:16 GMT
|
59
|
+
Content-Type:
|
60
|
+
- application/xml; charset=UTF-8
|
61
|
+
Content-Length:
|
62
|
+
- '218'
|
63
|
+
Connection:
|
64
|
+
- keep-alive
|
65
|
+
Vary:
|
66
|
+
- Accept-Encoding
|
67
|
+
Cache-Control:
|
68
|
+
- no-cache, no-store, no-transform, must-revalidate
|
69
|
+
body:
|
70
|
+
encoding: UTF-8
|
71
|
+
string: '<?xml version="1.0" encoding="UTF-8" standalone="yes"?><queries><query
|
72
|
+
name="Assigned to me" query="for: me"/><query name="Commented by me" query="commenter:
|
73
|
+
me"/><query name="Reported by me" query="by: me"/></queries>'
|
74
|
+
http_version:
|
75
|
+
recorded_at: Fri, 07 Feb 2014 22:43:02 GMT
|
76
|
+
recorded_with: VCR 2.8.0
|
data/spec/spec_helper.rb
CHANGED
@@ -7,15 +7,34 @@
|
|
7
7
|
|
8
8
|
require "webmock/rspec"
|
9
9
|
require "youtrack"
|
10
|
+
require "vcr"
|
11
|
+
|
12
|
+
VCR.configure do |c|
|
13
|
+
c.cassette_library_dir = "spec/cassettes"
|
14
|
+
c.hook_into :webmock
|
15
|
+
c.configure_rspec_metadata!
|
16
|
+
end
|
10
17
|
|
11
18
|
RSpec.configure do |config|
|
12
19
|
config.treat_symbols_as_metadata_keys_with_true_values = true
|
13
20
|
config.run_all_when_everything_filtered = true
|
14
21
|
config.filter_run :focus
|
15
22
|
|
23
|
+
config.treat_symbols_as_metadata_keys_with_true_values = true
|
24
|
+
config.extend VCR::RSpec::Macros
|
25
|
+
|
16
26
|
# Run specs in random order to surface order dependencies. If you find an
|
17
27
|
# order dependency and want to debug it, you can fix the order by providing
|
18
28
|
# the seed, which is printed after each run.
|
19
29
|
# --seed 1234
|
20
30
|
config.order = 'random'
|
21
31
|
end
|
32
|
+
|
33
|
+
def build_client(proto="http", user, pass)
|
34
|
+
Youtrack::Client.new do |c|
|
35
|
+
c.url = "#{proto}://testcloud.myjetbrains.com/youtrack"
|
36
|
+
c.login = user
|
37
|
+
c.password = pass
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
@@ -1,7 +1,6 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
3
|
describe Youtrack::Client do
|
4
|
-
let(:client) { Youtrack::Client.new }
|
5
4
|
|
6
5
|
describe "attributes" do
|
7
6
|
|
@@ -26,4 +25,68 @@ describe Youtrack::Client do
|
|
26
25
|
it { should respond_to(:issues) }
|
27
26
|
end
|
28
27
|
|
28
|
+
describe "connecting" do
|
29
|
+
|
30
|
+
context "success" do
|
31
|
+
let(:client) { build_client("https", "testuser", "testuser") }
|
32
|
+
use_vcr_cassette "client/connect"
|
33
|
+
|
34
|
+
it "should connect to a youtrack endpoint when having valid credentials" do
|
35
|
+
client.connect!
|
36
|
+
|
37
|
+
# STATUS
|
38
|
+
expect(client.connected?).to eq(true)
|
39
|
+
expect(client.connection.code).to eq(200)
|
40
|
+
expect(client.connection.message).to eq("OK")
|
41
|
+
|
42
|
+
# MESSAGE
|
43
|
+
entity_body = client.connection.parsed_response
|
44
|
+
expect(entity_body["error"]).to eq(nil)
|
45
|
+
expect(entity_body["login"]).to eq("ok")
|
46
|
+
|
47
|
+
# AUTH COOKIE
|
48
|
+
expect(client.connection.response["set-cookie"]).to match(%r{jetbrains.charisma.main.security})
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
|
53
|
+
context "credentials failure" do
|
54
|
+
let(:client) { build_client("https", "invalid_user", "invalid_pass") }
|
55
|
+
use_vcr_cassette "client/connect_credentials_error"
|
56
|
+
|
57
|
+
it "should not connect to a youtrack endpoint when credentials are invalid" do
|
58
|
+
client.connect!
|
59
|
+
|
60
|
+
# STATUS
|
61
|
+
expect(client.connected?).to eq(false)
|
62
|
+
expect(client.connection.code).to eq(403)
|
63
|
+
expect(client.connection.message).to eq("Forbidden")
|
64
|
+
|
65
|
+
# MESSAGE
|
66
|
+
entity_body = client.connection.parsed_response
|
67
|
+
expect(entity_body["login"]).to eq(nil)
|
68
|
+
expect(entity_body["error"]).to eq("Incorrect login or password.")
|
69
|
+
|
70
|
+
# AUTH COOKIE
|
71
|
+
expect(client.connection.response["set-cookie"]).to_not match(%r{jetbrains.charisma.main.security})
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
context "url endpoint failure" do
|
76
|
+
let(:client) { build_client("https", "testuser", "testuser") }
|
77
|
+
use_vcr_cassette "client/connect_url_error"
|
78
|
+
|
79
|
+
it "should not connect to a youtrack endpoint when the url is invalid" do
|
80
|
+
client.url = "https://testcloud.myjetbrains.com/youtracks"
|
81
|
+
client.connect!
|
82
|
+
|
83
|
+
# STATUS
|
84
|
+
expect(client.connected?).to eq(false)
|
85
|
+
expect(client.connection.code).to eq(404)
|
86
|
+
expect(client.connection.message).to eq("Not Found")
|
87
|
+
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
end
|
29
92
|
end
|
@@ -1,26 +1,81 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
3
|
describe Youtrack::User do
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
4
|
+
describe "api methods" do
|
5
|
+
use_vcr_cassette "users/init", record: :new_episodes
|
6
|
+
|
7
|
+
let(:users) do
|
8
|
+
client = build_client("https", "testuser", "testuser")
|
9
|
+
client.connect!
|
10
|
+
client.users
|
9
11
|
end
|
10
|
-
client.users
|
11
|
-
end
|
12
12
|
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
context "#current" do
|
14
|
+
use_vcr_cassette "users/current", record: :new_episodes
|
15
|
+
|
16
|
+
it "should take no arguments" do
|
17
|
+
expect(users.method(:current).arity).to eq(0)
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should return info about the currently authenticated user" do
|
21
|
+
entity_body = users.current
|
22
|
+
|
23
|
+
# STATUS
|
24
|
+
expect(users.response.code).to eq(200)
|
25
|
+
|
26
|
+
# BODY
|
27
|
+
expect(entity_body["user"]).to be_kind_of(Hash)
|
28
|
+
user_hash = entity_body["user"]
|
29
|
+
|
30
|
+
expect(user_hash.keys).to include("login")
|
31
|
+
expect(user_hash.keys).to include("email")
|
32
|
+
expect(user_hash.keys).to include("fullName")
|
33
|
+
end
|
34
|
+
|
16
35
|
end
|
17
36
|
|
18
|
-
|
19
|
-
users
|
37
|
+
context "#get_by_login" do
|
38
|
+
use_vcr_cassette "users/get_by_login", record: :new_episodes
|
39
|
+
|
40
|
+
it "should take one argument the user's login name" do
|
41
|
+
users.method(:get_by_login).arity.should eq(1)
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should return info about a searched for user" do
|
45
|
+
entity_body = users.get_by_login("testuser")
|
46
|
+
|
47
|
+
# STATUS
|
48
|
+
expect(users.response.code).to eq(200)
|
49
|
+
|
50
|
+
# BODY
|
51
|
+
user_hash = entity_body["user"]
|
52
|
+
expect(user_hash).to be_kind_of(Hash)
|
53
|
+
expect(user_hash["login"]).to_not eq(nil)
|
54
|
+
expect(user_hash["email"]).to_not eq(nil)
|
55
|
+
expect(user_hash["fullName"]).to_not eq(nil)
|
56
|
+
|
57
|
+
end
|
20
58
|
end
|
21
59
|
|
22
|
-
|
23
|
-
users
|
60
|
+
context "#get_saved_searches_for" do
|
61
|
+
use_vcr_cassette "users/get_saved_searches_for", record: :new_episodes
|
62
|
+
|
63
|
+
it "should take one argument the user's login name" do
|
64
|
+
users.method(:get_saved_searches_for).arity.should eq(1)
|
65
|
+
end
|
66
|
+
|
67
|
+
it "should return a list of the user's saved searches with name/query keys" do
|
68
|
+
entity_body = users.get_saved_searches_for("testuser")
|
69
|
+
|
70
|
+
# STATUS
|
71
|
+
expect(users.response.code).to eq(200)
|
72
|
+
|
73
|
+
# BODY
|
74
|
+
query_ary = entity_body["queries"]["query"].first
|
75
|
+
expect(query_ary).to be_kind_of(Hash)
|
76
|
+
expect(query_ary["name"]).to_not eq(nil)
|
77
|
+
expect(query_ary["query"]).to_not eq(nil)
|
78
|
+
end
|
24
79
|
end
|
25
80
|
|
26
81
|
end
|
data/youtrack.gemspec
CHANGED
@@ -4,6 +4,8 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
require 'youtrack/version'
|
5
5
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
|
+
|
8
|
+
# META
|
7
9
|
spec.name = "youtrack"
|
8
10
|
spec.version = Youtrack::VERSION
|
9
11
|
spec.authors = ["John Faucett"]
|
@@ -13,7 +15,8 @@ Gem::Specification.new do |spec|
|
|
13
15
|
spec.homepage = "http://jwaterfaucett.github.io/youtrack/"
|
14
16
|
spec.license = "GPLv3"
|
15
17
|
|
16
|
-
|
18
|
+
# FILES
|
19
|
+
spec.files = `git ls-files`.split($/).grep(%r{^(?!binstubs|examples)})
|
17
20
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
21
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
22
|
spec.require_paths = ["lib"]
|
@@ -28,4 +31,5 @@ Gem::Specification.new do |spec|
|
|
28
31
|
spec.add_development_dependency "cucumber", "~> 1.3.10"
|
29
32
|
spec.add_development_dependency "rspec", "~> 2.14.1"
|
30
33
|
spec.add_development_dependency "webmock", "~> 1.17.1"
|
34
|
+
spec.add_development_dependency "vcr", "~> 2.8.0"
|
31
35
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: youtrack
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Faucett
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-02-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: httparty
|
@@ -108,6 +108,20 @@ dependencies:
|
|
108
108
|
- - ~>
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: 1.17.1
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: vcr
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ~>
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: 2.8.0
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ~>
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: 2.8.0
|
111
125
|
description: JetBrains youTrack Rest API Client in Ruby
|
112
126
|
email:
|
113
127
|
- jwaterfaucett@gmail.com
|
@@ -115,6 +129,7 @@ executables: []
|
|
115
129
|
extensions: []
|
116
130
|
extra_rdoc_files: []
|
117
131
|
files:
|
132
|
+
- .envrc
|
118
133
|
- .gitignore
|
119
134
|
- .rspec
|
120
135
|
- .ruby-gemset
|
@@ -124,25 +139,24 @@ files:
|
|
124
139
|
- LICENSE.txt
|
125
140
|
- README.md
|
126
141
|
- Rakefile
|
127
|
-
- examples/authentication.rb
|
128
|
-
- examples/issues.rb
|
129
|
-
- examples/projects.rb
|
130
|
-
- examples/users.rb
|
131
|
-
- features/client/new_client_session.feature
|
132
|
-
- features/step_definitions/client/client_steps.rb
|
133
142
|
- features/support/env.rb
|
134
143
|
- features/support/hooks.rb
|
144
|
+
- features/support/vcr.rb
|
135
145
|
- features/support/world.rb
|
136
146
|
- lib/youtrack.rb
|
137
147
|
- lib/youtrack/client.rb
|
138
148
|
- lib/youtrack/resources/base.rb
|
139
149
|
- lib/youtrack/resources/issue.rb
|
140
150
|
- lib/youtrack/resources/project.rb
|
151
|
+
- lib/youtrack/resources/tag.rb
|
141
152
|
- lib/youtrack/resources/user.rb
|
142
153
|
- lib/youtrack/version.rb
|
143
|
-
- spec/
|
144
|
-
- spec/
|
145
|
-
- spec/
|
154
|
+
- spec/cassettes/client/connect.yml
|
155
|
+
- spec/cassettes/client/connect_credentials_error.yml
|
156
|
+
- spec/cassettes/client/connect_url_error.yml
|
157
|
+
- spec/cassettes/users/current.yml
|
158
|
+
- spec/cassettes/users/get_by_login.yml
|
159
|
+
- spec/cassettes/users/get_saved_searches_for.yml
|
146
160
|
- spec/spec_helper.rb
|
147
161
|
- spec/youtrack/client_spec.rb
|
148
162
|
- spec/youtrack/resources/user_spec.rb
|
@@ -172,14 +186,16 @@ signing_key:
|
|
172
186
|
specification_version: 4
|
173
187
|
summary: A Ruby REST API Client for JetBrains youTrack software
|
174
188
|
test_files:
|
175
|
-
- features/client/new_client_session.feature
|
176
|
-
- features/step_definitions/client/client_steps.rb
|
177
189
|
- features/support/env.rb
|
178
190
|
- features/support/hooks.rb
|
191
|
+
- features/support/vcr.rb
|
179
192
|
- features/support/world.rb
|
180
|
-
- spec/
|
181
|
-
- spec/
|
182
|
-
- spec/
|
193
|
+
- spec/cassettes/client/connect.yml
|
194
|
+
- spec/cassettes/client/connect_credentials_error.yml
|
195
|
+
- spec/cassettes/client/connect_url_error.yml
|
196
|
+
- spec/cassettes/users/current.yml
|
197
|
+
- spec/cassettes/users/get_by_login.yml
|
198
|
+
- spec/cassettes/users/get_saved_searches_for.yml
|
183
199
|
- spec/spec_helper.rb
|
184
200
|
- spec/youtrack/client_spec.rb
|
185
201
|
- spec/youtrack/resources/user_spec.rb
|
data/examples/authentication.rb
DELETED
@@ -1,12 +0,0 @@
|
|
1
|
-
require "youtrack"
|
2
|
-
|
3
|
-
# Setup the client configuration
|
4
|
-
client = Youtrack::Client.new do |c|
|
5
|
-
c.url = "http://example.your-youtrack.com"
|
6
|
-
c.login = "demo"
|
7
|
-
c.password = "demo"
|
8
|
-
end
|
9
|
-
|
10
|
-
# connect to the youtrack endpoint
|
11
|
-
# and save cookies in the client object
|
12
|
-
client.connect!
|
data/examples/issues.rb
DELETED
@@ -1,53 +0,0 @@
|
|
1
|
-
require "youtrack"
|
2
|
-
|
3
|
-
# Setup the client configuration
|
4
|
-
client = Youtrack::Client.new do |c|
|
5
|
-
c.url = "http://example.your-youtrack.com"
|
6
|
-
c.login = "demo"
|
7
|
-
c.password = "demo"
|
8
|
-
end
|
9
|
-
|
10
|
-
# connect to the youtrack endpoint
|
11
|
-
# and save cookies in the client object
|
12
|
-
client.connect!
|
13
|
-
|
14
|
-
|
15
|
-
# Get the issue resource inheriting cookies
|
16
|
-
# from client
|
17
|
-
issue_resource = client.issues
|
18
|
-
|
19
|
-
# Find an issue by ID
|
20
|
-
issue_resource.find("TT-6")
|
21
|
-
|
22
|
-
# Check if an issue exists
|
23
|
-
issue_resource.exists?("TT-6")
|
24
|
-
|
25
|
-
# Getting issue associated data
|
26
|
-
issue_resource.get_history_for("TT-6")
|
27
|
-
issue_resource.get_changes_for("TT-6")
|
28
|
-
issue_resource.get_attachments_for("TT-6")
|
29
|
-
issue_resource.get_comments_for("TT-6")
|
30
|
-
issue_resource.get_links_for("TT-6")
|
31
|
-
|
32
|
-
# Create an Issue
|
33
|
-
issue_resource.create(
|
34
|
-
project: "TT",
|
35
|
-
summary: "An example Bug",
|
36
|
-
description: "This Bug is evil"
|
37
|
-
)
|
38
|
-
|
39
|
-
# Update an Issue
|
40
|
-
issue_id = "TT-6"
|
41
|
-
issue_resource.update( issue_id , summary: "Evil Bug")
|
42
|
-
|
43
|
-
# Delete
|
44
|
-
issue_resource.destroy(issue_id)
|
45
|
-
|
46
|
-
# Add attachments to an issue
|
47
|
-
data = File.open("/tmp/dummy.txt")
|
48
|
-
content_type = "text/plain"
|
49
|
-
filename = "dummy.txt"
|
50
|
-
issue_resource.add_attachment(issue_id, data, content_type, filename )
|
51
|
-
|
52
|
-
# Add comments to an issue
|
53
|
-
issue_resource.add_comment(issue_id, comment: "This bug has been fixed")
|
data/examples/projects.rb
DELETED
@@ -1,48 +0,0 @@
|
|
1
|
-
require "youtrack"
|
2
|
-
|
3
|
-
# Setup the client configuration
|
4
|
-
client = Youtrack::Client.new do |c|
|
5
|
-
c.url = "http://example.your-youtrack.com"
|
6
|
-
c.login = "demo"
|
7
|
-
c.password = "demo"
|
8
|
-
end
|
9
|
-
|
10
|
-
# connect to the youtrack endpoint
|
11
|
-
# and save cookies in the client object
|
12
|
-
client.connect!
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
# create a project resource
|
17
|
-
# that inherits the connection
|
18
|
-
# from the client
|
19
|
-
project_resource = client.projects
|
20
|
-
|
21
|
-
# Get all accessible projects
|
22
|
-
project_list = project_resource.get_accessible_projects
|
23
|
-
|
24
|
-
# Get all issues for a particular project
|
25
|
-
project_id = "TT"
|
26
|
-
issue_list = project_resource.get_issues_for(project_id)
|
27
|
-
|
28
|
-
# These methods require that the login/password user
|
29
|
-
# have admin privileges
|
30
|
-
|
31
|
-
# Get all projects
|
32
|
-
project_resource.all
|
33
|
-
|
34
|
-
# Find a project by ID (shortName in youTrack vernacular)
|
35
|
-
project_resource.find("TT")
|
36
|
-
|
37
|
-
# Delete a project
|
38
|
-
project_resource.destroy("TT")
|
39
|
-
|
40
|
-
# Create a project
|
41
|
-
# All are required except description
|
42
|
-
project_resource.create(
|
43
|
-
projectId: "CC",
|
44
|
-
projectName: "Cool Cats",
|
45
|
-
startingNumber: 4,
|
46
|
-
projectLeadLogin: "demo",
|
47
|
-
description: "A Project about really awesome cats"
|
48
|
-
)
|
data/examples/users.rb
DELETED
File without changes
|
@@ -1,19 +0,0 @@
|
|
1
|
-
Feature: New Client Session
|
2
|
-
|
3
|
-
In order to start a new session with the youTrack Server
|
4
|
-
As a Client
|
5
|
-
I should be able to connect to the remote host
|
6
|
-
|
7
|
-
Scenario: starting a new session
|
8
|
-
Given I create a new Client
|
9
|
-
When I set the Client url to point to the Server
|
10
|
-
And I enter the correct login credentials
|
11
|
-
And I connect ok
|
12
|
-
Then I should be connected to the Server
|
13
|
-
|
14
|
-
Scenario: failing to start a new session
|
15
|
-
Given I create a new Client
|
16
|
-
When I set the Client url to point to the Server
|
17
|
-
And I enter incorrect login credentials
|
18
|
-
And I connect with error
|
19
|
-
Then I should receive an error Response
|
@@ -1,46 +0,0 @@
|
|
1
|
-
|
2
|
-
def fixture(filename)
|
3
|
-
File.join(YServer::FIXTURE_PATH, filename)
|
4
|
-
end
|
5
|
-
|
6
|
-
Given /^I create a new Client$/ do
|
7
|
-
@client.is_a?(Youtrack::Client).should eq(true)
|
8
|
-
end
|
9
|
-
|
10
|
-
Given /^I enter the correct login credentials$/ do
|
11
|
-
step "I set the Client#login= to <#{YServer::Login}>"
|
12
|
-
step "I set the Client#password= to <#{YServer::Password}>"
|
13
|
-
end
|
14
|
-
|
15
|
-
Given /^I enter incorrect login credentials$/ do
|
16
|
-
step "I set the Client#login= to <#{YServer::Lorem}>"
|
17
|
-
step "I set the Client#password= to <#{YServer::Lorem}>"
|
18
|
-
end
|
19
|
-
|
20
|
-
Given /^I set the Client url to point to the Server$/ do
|
21
|
-
@client.url = YServer::URL
|
22
|
-
end
|
23
|
-
|
24
|
-
Given /^I connect ok$/ do
|
25
|
-
@client.connect!
|
26
|
-
end
|
27
|
-
|
28
|
-
Given /^I connect with error$/ do
|
29
|
-
@client.connect!
|
30
|
-
end
|
31
|
-
|
32
|
-
Given /^I set the Client#([a-zA-Z_=]+) to <([a-zA-Z0-9_-]+)>$/ do |method, value|
|
33
|
-
@client.__send__(method, value)
|
34
|
-
end
|
35
|
-
|
36
|
-
Then /^I should be connected to the Server$/ do
|
37
|
-
@client.connected?.should eq(true)
|
38
|
-
end
|
39
|
-
|
40
|
-
Then /^I should receive an error response from the Server$/ do
|
41
|
-
@client.connected?.should eq(false)
|
42
|
-
end
|
43
|
-
|
44
|
-
Then(/^I should receive an error Response$/) do
|
45
|
-
@client.connected?.should eq(false)
|
46
|
-
end
|
@@ -1 +0,0 @@
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><error>Incorrect login or password.</error>
|
@@ -1 +0,0 @@
|
|
1
|
-
<login>ok</login>
|
@@ -1,10 +0,0 @@
|
|
1
|
-
{
|
2
|
-
"Server": "nginx",
|
3
|
-
"Date": "Fri, 24 Jan 2014 07:49:19 GMT",
|
4
|
-
"Content-Type": "application/xml; charset=UTF-8",
|
5
|
-
"Set-Cookie": "jetbrains.charisma.main.security.PRINCIPAL=NmZkNDc3NDgxZjBhOWNjMTVjNDQwNTljNTE1NzM1ODEwM2I3MjgyMDlkZDAzZGJhYTAzYzU1ZmYyZGUyZWMxNzpyb290;Path=/youtrack;Expires=Sat, 24-Jan-2015 07:49:19 GMT",
|
6
|
-
"Expires": "Thu, 01 Jan 1970 00:00:00 GMT",
|
7
|
-
"Access-Control-Allow-Origin": "chrome-extension://hgmloofddffdnphfgcellkdfbfbjeloo",
|
8
|
-
"Access-Control-Allow-Credentials": "true",
|
9
|
-
"Cache-Control": "no-cache, no-store, no-transform, must-revalidate"
|
10
|
-
}
|