blob: 923cae725e83624ab75fd226b79f0068b2e03543 [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.junit.runners.MethodSorters.*;
import java.util.*;
import org.apache.juneau.collections.*;
import org.apache.juneau.cp.*;
import org.apache.juneau.http.annotation.*;
import org.apache.juneau.rest.*;
import org.apache.juneau.rest.mock2.*;
import org.junit.*;
@FixMethodOrder(NAME_ASCENDING)
public class Rest_Messages_Test {
//------------------------------------------------------------------------------------------------------------------
// Basic tests
//------------------------------------------------------------------------------------------------------------------
@Rest
public static class A1 {
@RestMethod
public OMap a(ResourceBundle rb) {
return asMap(rb);
}
@RestMethod
public OMap b(Messages m) {
return asMap(m);
}
@RestMethod
public String c(Messages m, @Query("name") String name) {
return m.getString(name);
}
}
@Test
public void a01_default() throws Exception {
MockRestClient a1 = MockRestClient.build(A1.class);
a1.get("/a").run().assertBody().is("{'A1.key2':'A1.value2a',key1:'value1a',key2:'A1.value2a'}");
a1.get("/b").run().assertBody().is("{'A1.key2':'A1.value2a',key1:'value1a',key2:'A1.value2a'}");
a1.get("/c?name=key1").run().assertBody().is("value1a");
a1.get("/c?name=key2").run().assertBody().is("A1.value2a");
a1.get("/c?name=key3").run().assertBody().is("{!key3}");
}
@Rest
public static class A2 extends A1 {}
@Test
public void a02_subclassed() throws Exception {
MockRestClient a2 = MockRestClient.build(A2.class);
a2.get("/a").run().assertBody().is("{'A1.key2':'A1.value2a','A2.key3':'A2.value3b',key1:'value1a',key2:'value2b',key3:'A2.value3b'}");
a2.get("/b").run().assertBody().is("{'A1.key2':'A1.value2a','A2.key3':'A2.value3b',key1:'value1a',key2:'value2b',key3:'A2.value3b'}");
a2.get("/c?name=key1").run().assertBody().is("value1a");
a2.get("/c?name=key2").run().assertBody().is("value2b");
a2.get("/c?name=key3").run().assertBody().is("A2.value3b");
a2.get("/c?name=key4").run().assertBody().is("{!key4}");
}
//------------------------------------------------------------------------------------------------------------------
// Overridden on subclass.
//------------------------------------------------------------------------------------------------------------------
@Rest(messages="B1x")
public static class B1 {
@RestMethod
public OMap a(ResourceBundle rb) {
return asMap(rb);
}
@RestMethod
public OMap b(Messages m) {
return asMap(m);
}
@RestMethod
public String c(Messages m, @Query("name") String name) {
return m.getString(name);
}
}
@Test
public void b01_customName() throws Exception {
MockRestClient b1 = MockRestClient.build(B1.class);
b1.get("/a").run().assertBody().is("{'B1.key2':'B1.value2a',key1:'value1a',key2:'B1.value2a'}");
b1.get("/b").run().assertBody().is("{'B1.key2':'B1.value2a',key1:'value1a',key2:'B1.value2a'}");
b1.get("/c?name=key1").run().assertBody().is("value1a");
b1.get("/c?name=key2").run().assertBody().is("B1.value2a");
b1.get("/c?name=key3").run().assertBody().is("{!key3}");
}
@Rest(messages="B2x")
public static class B2 extends B1 {}
@Test
public void b02_subclassed_customName() throws Exception {
MockRestClient b2 = MockRestClient.build(B2.class);
b2.get("/a").run().assertBody().stderr().is("{'B1.key2':'B1.value2a','B2.key3':'B2.value3b',key1:'value1a',key2:'value2b',key3:'B2.value3b'}");
b2.get("/b").run().assertBody().is("{'B1.key2':'B1.value2a','B2.key3':'B2.value3b',key1:'value1a',key2:'value2b',key3:'B2.value3b'}");
b2.get("/c?name=key1").run().assertBody().is("value1a");
b2.get("/c?name=key2").run().assertBody().is("value2b");
b2.get("/c?name=key3").run().assertBody().is("B2.value3b");
b2.get("/c?name=key4").run().assertBody().is("{!key4}");
}
public static class B3 extends B1 {
@RestHook(HookEvent.INIT)
public void init(RestContextBuilder builder) throws Exception {
builder.messages("B2x");
builder.messages(B1.class, "B1x");
}
}
@Test
public void b03_viaBuilder() throws Exception {
MockRestClient b3 = MockRestClient.build(B3.class);
b3.get("/a").run().assertBody().stderr().is("{'B1.key2':'B1.value2a','B2.key3':'B2.value3b',key1:'value1a',key2:'value2b'}");
b3.get("/b").run().assertBody().is("{'B1.key2':'B1.value2a','B2.key3':'B2.value3b',key1:'value1a',key2:'value2b'}");
b3.get("/c?name=key1").run().assertBody().is("value1a");
b3.get("/c?name=key2").run().assertBody().is("value2b");
b3.get("/c?name=key3").run().assertBody().is("{!key3}");
b3.get("/c?name=key4").run().assertBody().is("{!key4}");
}
//------------------------------------------------------------------------------------------------------------------
// Helper methods.
//------------------------------------------------------------------------------------------------------------------
private static OMap asMap(ResourceBundle rb) {
OMap m = new OMap();
for (String k : new TreeSet<>(rb.keySet()))
m.put(k, rb.getString(k));
return m;
}
}