Hi Thanks for the link I will look into this further separately. See if I can do something Similar for Java EE and @EJB etc.
On 14 February 2017 at 09:12, Martin Grigorov <[email protected]> wrote: > Hi, > > I thought you want to use Spring (because the branch name mentions it). > You can do the same with Java EE. > If you use CDI then take a look at > https://github.com/apache/wicket/tree/master/wicket-cdi- > 1.1/src/test/java/org/apache/wicket/cdi > I have no idea how to test @EJB and @Stateless. I haven't used those since > very long time. > > Martin Grigorov > Wicket Training and Consulting > https://twitter.com/mtgrigorov > > On Mon, Feb 13, 2017 at 11:39 PM, David Beer <[email protected]> > wrote: > > > Hi Martin > > > > Thanks for the PR. So the solution is to remove JavaEE EJB references > > rather than to use them and test them. Understand Spring doesn't care > about > > EJB but and vice versa. I am only using spring for the security layer and > > JavaEE for everything else. > > > > So does @SpringBean just convert the EJB to a spring bean. > > > > So the only other way to test the EJB approach is to pass a mock value to > > the constructor and have it check if the value is null as the container > > will Inject the value. > > > > David > > > > > > On 13 February 2017 at 21:20, Martin Grigorov <[email protected]> > > wrote: > > > > > https://github.com/dmbeer/wicket-7-spring-security/pull/1 > > > There you go! > > > > > > I've removed/commented out the Java EE stuff. > > > Spring doesn't care about @EJB/@Stateless. As JavaEE doesn't care about > > > @Component & Co. > > > > > > Martin Grigorov > > > Wicket Training and Consulting > > > https://twitter.com/mtgrigorov > > > > > > On Mon, Feb 13, 2017 at 10:05 PM, David Beer <[email protected]> > > > wrote: > > > > > > > Hi Martin > > > > > > > > It appears there was an error when I tried to push the code. I am > > trying > > > to > > > > test AdminPage, and failing to inject the mock from the application > > > > context. > > > > > > > > AdminPage > > > > https://github.com/dmbeer/wicket-7-spring-security/blob/ > > > > wicket-7-test-spring-security/src/main/java/com/copperarrow/ > > > > pages/AdminPage.java > > > > AdmingPageTest > > > > https://github.com/dmbeer/wicket-7-spring-security/blob/ > > > > wicket-7-test-spring-security/src/test/java/com/copperarrow/ > > > > pages/AdminPageTest.java > > > > UserAccountDataProvider > > > > https://github.com/dmbeer/wicket-7-spring-security/blob/ > > > > wicket-7-test-spring-security/src/main/java/com/copperarrow/ > > > > model/dataproviders/UserAccountDataProvider.java > > > > > > > > This fails unable to attach container because UserDAO is always null > > even > > > > though I have added it to the applicationmock context. > > > > > > > > > > > > > > > > On 13 February 2017 at 19:57, Martin Grigorov <[email protected]> > > > > wrote: > > > > > > > > > Hi David, > > > > > > > > > > Please give more information what is not working. > > > > > There are 3 tests and all pass. > > > > > I have no idea where to look for a problem. > > > > > > > > > > Martin Grigorov > > > > > Wicket Training and Consulting > > > > > https://twitter.com/mtgrigorov > > > > > > > > > > On Sat, Feb 11, 2017 at 11:12 PM, David Beer < > [email protected] > > > > > > > > wrote: > > > > > > > > > > > Hi Martin > > > > > > > > > > > > Thanks for the pointers some left over code from refactoring. I > > have > > > > > > created an example project located here > > > > > > <https://github.com/dmbeer/wicket-7-spring-security/tree/ > > > > > > wicket-7-test-spring-security> > > > > > > under branch wicket-7-test-spring-security. I am still struggling > > to > > > > get > > > > > > the mocked DAO injected. Any pointers welcome or even a PR if not > > too > > > > > much > > > > > > trouble or example somewhere. > > > > > > > > > > > > Thanks > > > > > > > > > > > > David > > > > > > > > > > > > On 10 February 2017 at 07:46, Martin Grigorov < > > [email protected]> > > > > > > wrote: > > > > > > > > > > > > > Hi, > > > > > > > > > > > > > > > > > > > > > On Fri, Feb 10, 2017 at 12:08 AM, David Beer < > > > [email protected] > > > > > > > > > > > > wrote: > > > > > > > > > > > > > > > Hi Guys > > > > > > > > > > > > > > > > I am new to WicketTester and testing pages here. I am also > > > getting > > > > > back > > > > > > > > into wicket slowly. > > > > > > > > > > > > > > > > I have a page which currently simply adds a panel (more to > > come), > > > > the > > > > > > > panel > > > > > > > > contains a DataTable. I am not interested in the content of > the > > > > table > > > > > > > just > > > > > > > > that the page renders with an empty table. > > > > > > > > > > > > > > > > MyPage -> MyPanel -> Adds a DataTable, using dataproviders. > > > > > > > > > > > > > > > > The problem is that when I do tester.startPage(MyPage.class) > it > > > > tries > > > > > > to > > > > > > > > add the data table and fails unless data provider size is set > > to > > > 0. > > > > > > > > > > > > > > > > MyPage Code > > > > > > > > > > > > > > > > public class MyPage extends BasePage<AdminViewPage> { > > > > > > > > > > > > > > > > private NotificationPanel notificationPanel; > > > > > > > > private BootstrapDefaultDataTable<UserAccount, String> > > > userTable; > > > > > > > > > > > > > > > > > > > > > > This is not used/needed. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > public MyPage() { > > > > > > > > notificationPanel = new NotificationPanel("notification"); > > > > > > > > notificationPanel.setOutputMarkupId(true); > > > > > > > > notificationPanel.hideAfter(Duration.seconds(2)); > > > > > > > > add(notificationPanel); > > > > > > > > add(new MyPanel("users-table-panel")); > > > > > > > > } > > > > > > > > } > > > > > > > > > > > > > > > > MyPanel code > > > > > > > > > > > > > > > > public class MyPanel extends Panel { > > > > > > > > > > > > > > > > private NotificationPanel notificationPanel; > > > > > > > > private BootstrapDefaultDataTable<UserAccount, String> > > > > > userTable; > > > > > > > > > > > > > > > > > > > > > > > > public UsersTablePanel(String id) { > > > > > > > > super(id); > > > > > > > > notificationPanel = new NotificationPanel(" > > > notification"); > > > > > > > > > > > > > > > > > > > > > This looks the same as in the page. Maybe one should be removed > > ?! > > > > > > > > > > > > > > > > > > > > > > notificationPanel.setOutputMarkupId(true); > > > > > > > > notificationPanel.hideAfter(Duration.seconds(2)); > > > > > > > > add(notificationPanel); > > > > > > > > usersTable(); > > > > > > > > } > > > > > > > > > > > > > > > > private void usersTable() { > > > > > > > > List<IColumn<UserAccount, String>> columns = new > > > > > ArrayList<>(); > > > > > > > > columns.add(new PropertyColumn<>(Model.of("First > > Name"), > > > > > > > > "firstName", "firstName")); > > > > > > > > columns.add(new PropertyColumn<>(Model.of("Last > > Name"), > > > > > > > > "lastName")); > > > > > > > > columns.add(new PropertyColumn<>(Model.of("Email > > > > Address"), > > > > > > > > "email")); > > > > > > > > columns.add(new PropertyColumn<>(Model.of(" > Username"), > > > > > > > > "userName")); > > > > > > > > > > > > > > > > userTable = new BootstrapDefaultDataTable<>(" > > > users-table", > > > > > > > > columns, > > > > > > > > new DataProvider(), 20); > > > > > > > > > > > > > > > > > > > > > > Here you create a new DataProvider. > > > > > > > Does it use some service (Spring, EJB, Guice,...) to load the > > items > > > > ?! > > > > > > > > > > > > > > > > > > > > > > userTable.add(new TableBehavior().hover(). > bordered()); > > > > > > > > add(userTable); > > > > > > > > } > > > > > > > > } > > > > > > > > > > > > > > > > MyPageTest Code > > > > > > > > > > > > > > > > public class AdminViewPageTest extends WicketApplicationTest > { > > > > > > > > > > > > > > > > private WicketTester tester; > > > > > > > > > > > > > > > > private UsersDataProvider usersDataProvider; > > > > > > > > > > > > > > > > private AdminViewPage adminViewPage; > > > > > > > > > > > > > > > > @Before > > > > > > > > public void setUp() throws Exception { > > > > > > > > super.setUp(); > > > > > > > > usersDataProvider = mock(UsersDataProvider.class); > > > > > > > > adminViewPage = new AdminViewPage(); > > > > > > > > doNothing().when(usersDataProvider).checkDAO(); > > > > > > > > when(usersDataProvider.size()).thenReturn(0L); > > > > > > > > > > > > > > > > > > > > > > This usersDataProvider is not really used by > UsersTablePanel.java > > > > > because > > > > > > > it creates its own one (new DataProvider()). So the mocking > > doesn't > > > > > > really > > > > > > > help. > > > > > > > > > > > > > > > > > > > > > > tester = getTester(); > > > > > > > > tester.startPage(adminViewPage); > > > > > > > > } > > > > > > > > > > > > > > > > @Test > > > > > > > > public void renderSuccessfully() throws Exception { > > > > > > > > tester.assertRenderedPage(AdminViewPage.class); > > > > > > > > } > > > > > > > > > > > > > > > > } > > > > > > > > > > > > > > > > Any pointers would be great. > > > > > > > > > > > > > > > > > > > > > > Usually the DataProviders use some service to load the items > and > > > this > > > > > > > service is injected (Spring, CDI, ...). > > > > > > > Then in your tests you need to provide Dependency Injection > > context > > > > > that > > > > > > > provides mocked service. This way Wicket will used the mock for > > the > > > > > tests > > > > > > > and the real service when running the application. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Thanks > > > > > > > > > > > > > > > > David > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
