@Test
public void testShouldGetLatestMetadataVersionForTheGivenVersionList() throws ParseException
{

    MetadataRetryContext mockRetryContext = mock( MetadataRetryContext.class );
    DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern( "yyyy-MM-dd HH:mm:ssZ" );
    MetadataVersion currentVersion = new MetadataVersion();
    currentVersion.setType( VersionType.BEST_EFFORT );
    currentVersion.setName( "test_version1" );
    currentVersion.setCreated( new Date() );
    currentVersion.setHashCode( "samplehashcode1" );
    MetadataVersion version2 = new MetadataVersion( "Version2", VersionType.ATOMIC );
    org.joda.time.DateTime dateTime = dateTimeFormatter.parseDateTime( "2016-06-21 10:45:50Z" );
    version2.setCreated( dateTime.toDate() );
    MetadataVersion version3 = new MetadataVersion( "Version3", VersionType.ATOMIC );
    org.joda.time.DateTime dateTime2 = dateTimeFormatter.parseDateTime( "2016-06-21 10:45:54Z" );
    version3.setCreated( dateTime2.toDate() );
    MetadataVersion version4 = new MetadataVersion( "Version4", VersionType.ATOMIC );
    org.joda.time.DateTime dateTime3 = dateTimeFormatter.parseDateTime( "2016-06-21 10:45:58Z" );
    version4.setCreated( dateTime3.toDate() );
    List<MetadataVersion> metadataVersionList = new ArrayList<>();
    metadataVersionList.add( version2 );
    metadataVersionList.add( version3 );
    metadataVersionList.add( version4 );
    when( metadataVersionDelegate.getMetaDataDifference( currentVersion ) ).thenReturn( metadataVersionList );
    List<MetadataVersion> expectedListOfVersions = metadataSyncPreProcessor.handleMetadataVersionsList( mockRetryContext, currentVersion );
    verify( systemSettingManager ).saveSystemSetting( SettingKey.REMOTE_METADATA_VERSION, version4.getName() );
    assertEquals( 3, expectedListOfVersions.size() );
}