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 <mgrigo...@apache.org> 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 <david.m.b...@gmail.com> > 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 <mgrigo...@apache.org> > > 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 <david.m.b...@gmail.com> > > > 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 <mgrigo...@apache.org> > > > > wrote: > > > > > > > > > Hi, > > > > > > > > > > > > > > > On Fri, Feb 10, 2017 at 12:08 AM, David Beer < > david.m.b...@gmail.com > > > > > > > > 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 > > > > > > > > > > > > > > > > > > > > >