View difference between Paste ID: ywagxPdP and
SHOW: | | - or go back to the newest paste.
1-
1+
2
import groovyx.net.http.HTTPBuilder;
3
4
import org.junit.runner.RunWith;
5
import org.scribe.oauth.Scribe;
6
import org.scribe.oauth.Token 
7
8
import spock.lang.Specification;
9
import spock.lang.Sputnik;
10
11
@RunWith(Sputnik)
12
public class OAuthHttpBuilderTest extends Specification {
13
	HTTPBuilder delegate = Mock()
14
	Scribe signer
15
	Token tok
16
	
17
	OAuthHttpBuilder underTest
18
	
19
	def uri
20
	
21
	def setup() {
22
		Properties props = new Properties([    "consumer.key" : "myClientKey", 
23
		                                    "consumer.secret" : "myClientSecret" ])
24
		signer = new Scribe(props);
25
		tok = new Token("token_key", "token_secret")
26
		underTest = new OAuthHttpBuilder(delegate, signer)
27
	}
28
	
29
	def "Null token passes Scribe a token with empty token/secret"() {
30
		given:
31
		signer = Mock(Scribe)
32
		delegate.getUri() >> (uri = "http://localhost:8080/users/1")
33
		
34
		when:
35
		underTest = new OAuthHttpBuilder(delegate, signer)
36
		underTest.get(query: null)
37
		
38
		then:
39
		1 * signer.signRequest(_,_) >> { scribeReq, token ->
40
			assert token.token == ""
41
			assert token.secret == ""
42
		}
43
	}
44
	
45
	def "Signs and passes authorization header in GET method"() {
46
		given:
47
		delegate.getUri() >> (uri = "http://localhost:8080/users/1")
48
		
49
		when:
50
		underTest.get(query: null, accessToken: tok)
51
		
52
		then:
53
		1 * delegate.get(_) >> { args -> argsHaveAuthorizationString(args) }
54
	}
55
	
56
	def "Passes authorization header in GET method with default access token"() {
57
		given:
58
		delegate.getUri() >> (uri = "http://localhost:8080/users/1")
59
		underTest.setAccessToken(tok)
60
		
61
		when:
62
		underTest.get(query: null)
63
		
64
		then:
65
		1 * delegate.get(_) >> { args -> argsHaveAuthorizationString(args) }
66
	}
67
	
68
	def "Passes authorization header in POST method"() {
69
		given:
70
		delegate.getUri() >> (uri = "http://localhost:8080/users/1")
71
		
72
		when:
73
		underTest.post(body: null, accessToken: tok)
74
		
75
		then:
76
		1 * delegate.post(_) >> { args -> argsHaveAuthorizationString(args) }
77
	}
78
	
79
	def "Provides query params for GET requests"() {
80
		given:
81
		signer = Mock(Scribe)
82
		delegate.getUri() >> (uri = "http://localhost:8080/users/1")
83
		def queryParams = [a: "b", c: "d"]
84
		                   
85
		when:
86
		underTest = new OAuthHttpBuilder(delegate, signer)
87
		underTest.get(query: queryParams, accessToken: tok)
88
		
89
		then:
90
		1 * signer.signRequest(_,tok) >> { scribeReq, token ->
91
			def bodyParams = scribeReq.getBodyParams()
92
			assert bodyParams.size() == 2
93
			bodyParams.each { entry ->
94
				assert queryParams[entry.key] == entry.value
95
			}
96
			scribeReq.addHeader("Authorization", "sure you're authorized why not")
97
		}
98
	}
99
	
100
	def "Provides query params and body params for POST requests"() {
101
		given:
102
		signer = Mock(Scribe)
103
		delegate.getUri() >> (uri = "http://localhost:8080/users/1")
104
		def queryParams = [a: "b", c: "d"]
105
		def bodyParams = [e: "f", g: "h"]
106
		                  
107
		when:
108
		underTest = new OAuthHttpBuilder(delegate, signer)
109
		underTest.post(query: queryParams, body: bodyParams, accessToken: tok)
110
		
111
		then:
112
		1 * signer.signRequest(_,tok) >> { scribeReq, token ->
113
			def passedBodyParams = scribeReq.getBodyParams()
114
			assert passedBodyParams.size() == 4
115
			bodyParams.each { entry ->
116
				assert (queryParams[entry.key] == entry.value) ||
117
				(bodyParams[entry.key] == entry.value)
118
			}
119
			scribeReq.addHeader("Authorization", "sure you're authorized why not")
120
		}
121
	}
122
	
123
	def "Handles integer inputs fine"() {
124
		given:
125
		signer = Mock(Scribe)
126
		delegate.getUri() >> (uri = "http://localhost:8080/users/1")
127
		def queryParams = [aNumber: 1]
128
		underTest = new OAuthHttpBuilder(delegate, signer)
129
		
130
		when:
131
		underTest.get(query: queryParams, accessToken: tok)
132
		
133
		then:
134
		1 * signer.signRequest(_, tok) >> { scribeReq, token ->
135
			def passedBodyParams = scribeReq.getBodyParams()
136
			assert passedBodyParams.size() == 1
137
			passedBodyParams.each { entry ->
138
				assert entry.value == "1"
139
			}
140
		}
141
	}
142
	
143
	/*
144
	 * Private Methods
145
	 */
146
	def argsHaveAuthorizationString(args) {
147
		assert args.headers.size() != 0
148
		assert args.headers.Authorization.size() == 1
149
		assert args.headers.Authorization[0] != null
150
	}
151
}