Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

TRUNK-5817: Migrate web and webapp package tests to Junit 5 #3392

Merged
merged 1 commit into from
Aug 5, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
* <li>to decouple the org.openmrs.liquibase.ChangeLogDetective class from the
* org.openmrs.util.DatabaseUpdater class
* <li>to support integration testing of the org.openmrs.liquibase.ChangeLogDetective class with
* MariaDB
* the H2 database.
*
* @since 2.4
*/
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
/**
* This Source Code Form is subject to the terms of the Mozilla Public License,
* v. 2.0. If a copy of the MPL was not distributed with this file, You can
* obtain one at http://mozilla.org/MPL/2.0/. OpenMRS is also distributed under
* the terms of the Healthcare Disclaimer located at http://openmrs.org/license.
*
* Copyright (C) OpenMRS Inc. OpenMRS is a registered trademark and the OpenMRS
* graphic logo is a trademark of OpenMRS Inc.
*/
package org.openmrs.web.filter.update;

import java.util.List;
import org.openmrs.liquibase.LiquibaseProvider;
import org.openmrs.util.DatabaseUpdater;

public class DatabaseUpdaterWrapper {
public List<DatabaseUpdater.OpenMRSChangeSet> getUnrunDatabaseChanges( LiquibaseProvider liquibaseProvider) throws Exception {
return DatabaseUpdater.getUnrunDatabaseChanges( liquibaseProvider );
}

public boolean isLocked() {
return DatabaseUpdater.isLocked();
}

public boolean updatesRequired() throws Exception {
return DatabaseUpdater.updatesRequired();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@

import java.util.List;
import org.openmrs.liquibase.LiquibaseProvider;
import org.openmrs.util.DatabaseUpdater;
import org.openmrs.util.DatabaseUpdater.OpenMRSChangeSet;
import org.openmrs.util.DatabaseUpdaterLiquibaseProvider;
import org.openmrs.web.filter.StartupFilter;
Expand All @@ -33,11 +32,13 @@ public class UpdateFilterModel {

private LiquibaseProvider liquibaseProvider;

private DatabaseUpdaterWrapper databaseUpdaterWrapper;

/**
* Default constructor that sets up some of the properties
*/
public UpdateFilterModel() {
this(new DatabaseUpdaterLiquibaseProvider());
this(new DatabaseUpdaterLiquibaseProvider(), new DatabaseUpdaterWrapper());
log.debug("executing default constructor...");
}

Expand All @@ -46,17 +47,18 @@ public UpdateFilterModel() {
*
* @param liquibaseProvider a Liquibase provider
*/
public UpdateFilterModel(LiquibaseProvider liquibaseProvider) {
public UpdateFilterModel(LiquibaseProvider liquibaseProvider, DatabaseUpdaterWrapper databaseUpdaterWrapper) {
log.debug("executing non-default constructor...");
this.liquibaseProvider = liquibaseProvider;
this.databaseUpdaterWrapper = databaseUpdaterWrapper;

updateChanges();

try {
if (changes != null && !changes.isEmpty()) {
updateRequired = true;
} else {
updateRequired = DatabaseUpdater.updatesRequired();
updateRequired = databaseUpdaterWrapper.updatesRequired();
}
}
catch (Exception e) {
Expand All @@ -71,11 +73,11 @@ public UpdateFilterModel(LiquibaseProvider liquibaseProvider) {
public void updateChanges() {
log.debug("executing updateChanges()...");
try {
changes = DatabaseUpdater.getUnrunDatabaseChanges(liquibaseProvider);
changes = databaseUpdaterWrapper.getUnrunDatabaseChanges(liquibaseProvider);

// not sure why this is necessary...
if (changes == null && DatabaseUpdater.isLocked()) {
changes = DatabaseUpdater.getUnrunDatabaseChanges(liquibaseProvider);
if (changes == null && databaseUpdaterWrapper.isLocked()) {
changes = databaseUpdaterWrapper.getUnrunDatabaseChanges(liquibaseProvider);
}
}
catch (Exception e) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,9 @@
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.openmrs.liquibase.LiquibaseProvider;
import org.openmrs.util.DatabaseUpdater;
import org.openmrs.util.DatabaseUpdater.OpenMRSChangeSet;
import org.openmrs.util.DatabaseUpdaterLiquibaseProvider;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PowerMockIgnore;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;

import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
Expand All @@ -34,139 +28,126 @@
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

/**
* Tests {@link UpdateFilterModel}.
*/
@RunWith(PowerMockRunner.class)
@PrepareForTest(DatabaseUpdater.class)
@PowerMockIgnore({ "com.sun.org.apache.xerces.*", "javax.xml.*", "org.xml.*", "javax.management.*", "org.w3c.dom.*" })
public class UpdateFilterModelTest {

private DatabaseUpdaterLiquibaseProvider liquibaseProvider;
private DatabaseUpdaterWrapper databaseUpdaterWrapper;

private UpdateFilterModel model;

@Before
public void setUp() {
liquibaseProvider = new DatabaseUpdaterLiquibaseProvider();
PowerMockito.mockStatic(DatabaseUpdater.class);
databaseUpdaterWrapper = mock( DatabaseUpdaterWrapper.class );
}

@Test
public void createUpdateFilterModel_shouldrequireAnUpdateAndSetChangesToUnrunDatabaseChangesIfChangesAreNonEmpty()
throws Exception {
List<OpenMRSChangeSet> changes = Arrays.asList(mock(OpenMRSChangeSet.class));

when(DatabaseUpdater.getUnrunDatabaseChanges(any(LiquibaseProvider.class))).thenReturn(changes);
when(DatabaseUpdater.isLocked()).thenReturn(false);
when(databaseUpdaterWrapper.getUnrunDatabaseChanges(any(LiquibaseProvider.class))).thenReturn(changes);
when(databaseUpdaterWrapper.isLocked()).thenReturn(false);

model = new UpdateFilterModel(liquibaseProvider);
model = new UpdateFilterModel(liquibaseProvider, databaseUpdaterWrapper);

assertTrue("should require an update", model.updateRequired);
assertThat(model.changes, is(changes));

PowerMockito.verifyStatic(DatabaseUpdater.class);
DatabaseUpdater.getUnrunDatabaseChanges(liquibaseProvider);
PowerMockito.verifyStatic(DatabaseUpdater.class, never());
DatabaseUpdater.updatesRequired();
verify( databaseUpdaterWrapper, times(1)).getUnrunDatabaseChanges( liquibaseProvider );
verify( databaseUpdaterWrapper, never()).updatesRequired();
}

@Test
public void createUpdateFilterModel_shouldRequiredAnUpdateIfChangesAreEmptyButDatabaseUpdaterDoesRequireAnUpdate()
throws Exception {
List<OpenMRSChangeSet> changes = new ArrayList<>();

when(DatabaseUpdater.getUnrunDatabaseChanges(any(LiquibaseProvider.class))).thenReturn(changes);
when(DatabaseUpdater.isLocked()).thenReturn(false);
when(DatabaseUpdater.updatesRequired()).thenReturn(true);
when(databaseUpdaterWrapper.getUnrunDatabaseChanges(any(LiquibaseProvider.class))).thenReturn(changes);
when(databaseUpdaterWrapper.isLocked()).thenReturn(false);
when(databaseUpdaterWrapper.updatesRequired()).thenReturn(true);

model = new UpdateFilterModel(liquibaseProvider);
model = new UpdateFilterModel(liquibaseProvider, databaseUpdaterWrapper);

assertTrue("should require an update", model.updateRequired);
assertThat(model.changes, is(empty()));

PowerMockito.verifyStatic(DatabaseUpdater.class);
DatabaseUpdater.getUnrunDatabaseChanges(liquibaseProvider);
PowerMockito.verifyStatic(DatabaseUpdater.class);
DatabaseUpdater.updatesRequired();

verify( databaseUpdaterWrapper, times(1)).getUnrunDatabaseChanges( liquibaseProvider );
verify( databaseUpdaterWrapper, times(1)).updatesRequired();
}

@Test
public void createUpdateFilterModel_shouldNotRequireAnUpdateIfChangesAreEmptyAndDatabaseUpdaterDoesNotRequireAnUpdate()
throws Exception {
List<OpenMRSChangeSet> changes = new ArrayList<>();

when(DatabaseUpdater.getUnrunDatabaseChanges(any(LiquibaseProvider.class))).thenReturn(changes);
when(DatabaseUpdater.isLocked()).thenReturn(false);
when(DatabaseUpdater.updatesRequired()).thenReturn(false);
when(databaseUpdaterWrapper.getUnrunDatabaseChanges(any(LiquibaseProvider.class))).thenReturn(changes);
when(databaseUpdaterWrapper.isLocked()).thenReturn(false);
when(databaseUpdaterWrapper.updatesRequired()).thenReturn(false);

model = new UpdateFilterModel(liquibaseProvider);
model = new UpdateFilterModel(liquibaseProvider, databaseUpdaterWrapper);

assertFalse("should not require an update", model.updateRequired);
assertThat(model.changes, is(empty()));

PowerMockito.verifyStatic(DatabaseUpdater.class);
DatabaseUpdater.getUnrunDatabaseChanges(liquibaseProvider);
PowerMockito.verifyStatic(DatabaseUpdater.class);
DatabaseUpdater.updatesRequired();

verify( databaseUpdaterWrapper, times(1)).getUnrunDatabaseChanges( liquibaseProvider );
verify( databaseUpdaterWrapper, times(1)).updatesRequired();
}

@Test
public void createUpdateFilterModel_shouldNotRequireAnUpdateIfChangesAreNullAndDatabaseUpdaterDoesNotRequireAnUpdate()
throws Exception {

when(DatabaseUpdater.getUnrunDatabaseChanges(any(LiquibaseProvider.class))).thenReturn(null);
when(DatabaseUpdater.isLocked()).thenReturn(false);
when(DatabaseUpdater.updatesRequired()).thenReturn(false);
when(databaseUpdaterWrapper.getUnrunDatabaseChanges(any(LiquibaseProvider.class))).thenReturn(null);
when(databaseUpdaterWrapper.isLocked()).thenReturn(false);
when(databaseUpdaterWrapper.updatesRequired()).thenReturn(false);

model = new UpdateFilterModel(liquibaseProvider);
model = new UpdateFilterModel(liquibaseProvider, databaseUpdaterWrapper);

assertFalse("should not require an update", model.updateRequired);
assertNull("should not have changes", model.changes);

PowerMockito.verifyStatic(DatabaseUpdater.class);
DatabaseUpdater.getUnrunDatabaseChanges(liquibaseProvider);
PowerMockito.verifyStatic(DatabaseUpdater.class);
DatabaseUpdater.updatesRequired();

verify( databaseUpdaterWrapper, times(1)).getUnrunDatabaseChanges( liquibaseProvider );
verify( databaseUpdaterWrapper, times(1)).updatesRequired();
}

@Test
public void createUpdateFilterModel_shouldNotRequireAnUpdateIfDatabaseUpdaterIsLockedAndCallingDatabaseUpdaterTwiceAlwaysReturnsNull()
throws Exception {

when(DatabaseUpdater.getUnrunDatabaseChanges(any(LiquibaseProvider.class))).thenReturn(null);
when(DatabaseUpdater.isLocked()).thenReturn(true);
when(DatabaseUpdater.updatesRequired()).thenReturn(false);
when(databaseUpdaterWrapper.getUnrunDatabaseChanges(any(LiquibaseProvider.class))).thenReturn(null);
when(databaseUpdaterWrapper.isLocked()).thenReturn(true);
when(databaseUpdaterWrapper.updatesRequired()).thenReturn(false);

model = new UpdateFilterModel(liquibaseProvider);
model = new UpdateFilterModel(liquibaseProvider, databaseUpdaterWrapper);

assertFalse("should not require an update", model.updateRequired);
assertNull("should not have changes", model.changes);

PowerMockito.verifyStatic(DatabaseUpdater.class, times(2));
DatabaseUpdater.getUnrunDatabaseChanges(liquibaseProvider);
PowerMockito.verifyStatic(DatabaseUpdater.class);
DatabaseUpdater.updatesRequired();

verify( databaseUpdaterWrapper, times(2)).getUnrunDatabaseChanges( liquibaseProvider );
verify( databaseUpdaterWrapper, times(1)).updatesRequired();
}

@Test
public void createUpdateFilterModel_shouldRequireAnUpdateIfDatabaseUpdaterIsLockedAndChangesAreNotNull()
throws Exception {
List<OpenMRSChangeSet> changes = Arrays.asList(mock(OpenMRSChangeSet.class));

when(DatabaseUpdater.getUnrunDatabaseChanges(any(LiquibaseProvider.class))).thenReturn(changes);
when(DatabaseUpdater.isLocked()).thenReturn(true);
when(databaseUpdaterWrapper.getUnrunDatabaseChanges(any(LiquibaseProvider.class))).thenReturn(changes);
when(databaseUpdaterWrapper.isLocked()).thenReturn(true);

model = new UpdateFilterModel(liquibaseProvider);
model = new UpdateFilterModel(liquibaseProvider, databaseUpdaterWrapper);

assertTrue("should require an update", model.updateRequired);
assertThat(model.changes, is(changes));

PowerMockito.verifyStatic(DatabaseUpdater.class);
DatabaseUpdater.getUnrunDatabaseChanges(liquibaseProvider);
PowerMockito.verifyStatic(DatabaseUpdater.class, never());
DatabaseUpdater.updatesRequired();

verify( databaseUpdaterWrapper, times(1)).getUnrunDatabaseChanges( liquibaseProvider );
verify( databaseUpdaterWrapper, never()).updatesRequired();
}
}