blob: 5f52ecf97943fbe21bf9b27f05b809d20c5f935e [file] [log] [blame]
// ***************************************************************************************************************************
// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file *
// * distributed with this work for additional information regarding copyright ownership. The ASF licenses this file *
// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance *
// * with the License. You may obtain a copy of the License at *
// * *
// * http://www.apache.org/licenses/LICENSE-2.0 *
// * *
// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an *
// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the *
// * specific language governing permissions and limitations under the License. *
// ***************************************************************************************************************************
package org.apache.juneau.rest.annotation;
import static org.apache.juneau.rest.testutils.TestUtils.*;
import static org.junit.Assert.*;
import org.apache.juneau.*;
import org.apache.juneau.dto.swagger.*;
import org.apache.juneau.http.annotation.*;
import org.apache.juneau.rest.mock2.*;
import org.junit.*;
import org.junit.runners.*;
/**
* Tests related to @ResponseHeader annotation.
*/
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class ResponseHeaderAnnotationTest {
//=================================================================================================================
// Basic tests
//=================================================================================================================
@Rest
public static class A {
@RestMethod
public void a01(Value<A01> h) {
h.set(new A01());
}
@RestMethod
public void a02(@ResponseHeader(name="Foo") Value<String> h) {
h.set("foo");
}
@RestMethod
public void a03(@ResponseHeader(name="Bar") Value<A01> h) {
h.set(new A01());
}
}
@ResponseHeader(name="Foo")
public static class A01 {
@Override
public String toString() {return "foo";}
}
static MockRest a = MockRest.build(A.class);
@Test
public void a01_valueOnParameterPojo() throws Exception {
a.get("/a01").execute().assertStatus(200).assertHeader("Foo", "foo");
}
@Test
public void a02_valueOnParameterString() throws Exception {
a.get("/a02").execute().assertStatus(200).assertHeader("Foo", "foo");
}
@Test
public void a03_valueOnParameterOverrideName() throws Exception {
a.get("/a03").execute().assertStatus(200).assertHeader("Bar", "foo");
}
//=================================================================================================================
// @ResponseHeader on POJO
//=================================================================================================================
@Rest
public static class SA {
@ResponseHeader(
name="H",
description="a",
type="string"
)
public static class SA01 {}
@RestMethod
public void sa01(Value<SA01> h) {}
@ResponseHeader(
name="H",
api={
"description:'a',",
"type:'string'"
}
)
public static class SA02 {}
@RestMethod
public void sa02(Value<SA02> h) {}
@ResponseHeader(
name="H",
api={
"description:'b',",
"type:'number'"
},
description="a",
type="string"
)
public static class SA03 {}
@RestMethod
public void sa03(Value<SA03> h) {}
@ResponseHeader(name="H", code=100)
public static class SA04 {}
@RestMethod
public void sa04(Value<SA04> h) {}
@ResponseHeader(name="H", code={100,101})
public static class SA05 {}
@RestMethod
public void sa05(Value<SA05> h) {}
@ResponseHeader(name="H", description="a")
public static class SA07 {}
@RestMethod
public void sa07(Value<SA07> h) {}
@ResponseHeader("H")
public static class SA08 {}
@RestMethod
public void sa08(Value<SA08> h) {}
}
static Swagger sa = getSwagger(SA.class);
@Test
public void sa01_ResponseHeader_onPojo_basic() throws Exception {
HeaderInfo x = sa.getResponseInfo("/sa01","get",200).getHeader("H");
assertEquals("a", x.getDescription());
assertEquals("string", x.getType());
}
@Test
public void sa02_ResponseHeader_onPojo_api() throws Exception {
HeaderInfo x = sa.getResponseInfo("/sa02","get",200).getHeader("H");
assertEquals("a", x.getDescription());
assertEquals("string", x.getType());
}
@Test
public void sa03_ResponseHeader_onPojo_mixed() throws Exception {
HeaderInfo x = sa.getResponseInfo("/sa03","get",200).getHeader("H");
assertEquals("a", x.getDescription());
assertEquals("string", x.getType());
}
@Test
public void sa04_ResponseHeader_onPojo_code() throws Exception {
HeaderInfo x = sa.getResponseInfo("/sa04","get",100).getHeader("H");
assertNotNull(x);
}
@Test
public void sa05_ResponseHeader_onPojo_codes() throws Exception {
Operation x = sa.getOperation("/sa05","get");
assertNotNull(x.getResponse(100).getHeader("H"));
assertNotNull(x.getResponse(101).getHeader("H"));
}
@Test
public void sa07_ResponseHeader_onPojo_nocode() throws Exception {
HeaderInfo x = sa.getResponseInfo("/sa07","get",200).getHeader("H");
assertEquals("a", x.getDescription());
}
@Test
public void sa08_ResponseHeader_onPojo_value() throws Exception {
HeaderInfo x = sa.getResponseInfo("/sa08","get",200).getHeader("H");
assertNotNull(x);
}
//=================================================================================================================
// @ResponseHeader on parameter
//=================================================================================================================
@Rest
public static class SB {
public static class SB01 {}
@RestMethod
public void sb01(
@ResponseHeader(
name="H",
description="a",
type="string"
) Value<SB01> h) {}
public static class SB02 {}
@RestMethod
public void sb02(
@ResponseHeader(
name="H",
api={
"description:'a',",
"type:'string'"
}
) Value<SB02> h) {}
public static class SB03 {}
@RestMethod
public void sb03(
@ResponseHeader(
name="H",
api={
"description:'b',",
"type:'number'"
},
description="a",
type="string"
) Value<SB03> h) {}
public static class SB04 {}
@RestMethod
public void sb04(@ResponseHeader(name="H", code=100) Value<SB04> h) {}
public static class SB05 {}
@RestMethod
public void sb05(@ResponseHeader(name="H", code={100,101}) Value<SB05> h) {}
public static class SB07 {}
@RestMethod
public void sb07(@ResponseHeader(name="H", description="a") Value<SB07> h) {}
public static class SB08 {}
@RestMethod
public void sb08(@ResponseHeader("H") Value<SB08> h) {}
}
static Swagger sb = getSwagger(SB.class);
@Test
public void sb01_ResponseHeader_onPojo_basic() throws Exception {
HeaderInfo x = sb.getResponseInfo("/sb01","get",200).getHeader("H");
assertEquals("a", x.getDescription());
assertEquals("string", x.getType());
}
@Test
public void sb02_ResponseHeader_onPojo_api() throws Exception {
HeaderInfo x = sb.getResponseInfo("/sb02","get",200).getHeader("H");
assertEquals("a", x.getDescription());
assertEquals("string", x.getType());
}
@Test
public void sb03_ResponseHeader_onPojo_mixed() throws Exception {
HeaderInfo x = sb.getResponseInfo("/sb03","get",200).getHeader("H");
assertEquals("a", x.getDescription());
assertEquals("string", x.getType());
}
@Test
public void sb04_ResponseHeader_onPojo_code() throws Exception {
HeaderInfo x = sb.getResponseInfo("/sb04","get",100).getHeader("H");
assertNotNull(x);
}
@Test
public void sb05_ResponseHeader_onPojo_codes() throws Exception {
Operation x = sb.getOperation("/sb05","get");
assertNotNull(x.getResponse(100).getHeader("H"));
assertNotNull(x.getResponse(101).getHeader("H"));
}
@Test
public void sb07_ResponseHeader_onPojo_nocode() throws Exception {
HeaderInfo x = sb.getResponseInfo("/sb07","get",200).getHeader("H");
assertEquals("a", x.getDescription());
}
@Test
public void sb08_ResponseHeader_onPojo_value() throws Exception {
HeaderInfo x = sb.getResponseInfo("/sb08","get",200).getHeader("H");
assertNotNull(x);
}
}