diff --git a/.gitignore b/.gitignore index b63da4551..19400d812 100644 --- a/.gitignore +++ b/.gitignore @@ -39,4 +39,76 @@ bin/ .vscode/ ### Mac OS ### -.DS_Store \ No newline at end of file +.DS_Store + +.idea/ +.idea/shelf +/confluence/target +/dependencies/repo +/android.tests.dependencies +/dependencies/android.tests.dependencies +/dist +/local +/gh-pages +/ideaSDK +/clionSDK +/android-studio/sdk +/tmp +/intellij +workspace.xml +*.versionsBackup +/idea/testData/debugger/tinyApp/classes* +/jps-plugin/testData/kannotator +/js/js.translator/testData/out/ +/js/js.translator/testData/out-min/ +/js/js.translator/testData/out-pir/ +.gradle/ +!**/src/**/build +!**/test/**/build +!**/testData/**/*.iml +.idea/remote-targets.xml +.idea/libraries/Gradle*.xml +.idea/libraries/Maven*.xml +.idea/artifacts/PILL_*.xml +.idea/artifacts/KotlinPlugin.xml +.idea/modules +.idea/runConfigurations/JPS_*.xml +.idea/runConfigurations/PILL_*.xml +.idea/runConfigurations/_FP_*.xml +.idea/runConfigurations/_MT_*.xml +.idea/libraries +.idea/gradle.xml +.idea/inspectionProfiles/profiles_settings.xml +.idea/.name +.idea/artifacts/dist_auto_* +.idea/artifacts/dist.xml +.idea/artifacts/ideaPlugin.xml +.idea/artifacts/kotlinc.xml +.idea/artifacts/kotlin_compiler_jar.xml +.idea/artifacts/kotlin_plugin_jar.xml +.idea/artifacts/kotlin_jps_plugin_jar.xml +.idea/artifacts/kotlin_daemon_client_jar.xml +.idea/artifacts/kotlin_imports_dumper_compiler_plugin_jar.xml +.idea/artifacts/kotlin_main_kts_jar.xml +.idea/artifacts/kotlin_compiler_client_embeddable_jar.xml +.idea/artifacts/kotlin_reflect_jar.xml +.idea/artifacts/kotlin_stdlib_js_ir_* +.idea/artifacts/kotlin_test_js_ir_* +.idea/artifacts/kotlin_stdlib_wasm_* +.idea/artifacts/kotlin_test_wasm_* +.idea/artifacts/kotlinx_atomicfu_runtime_* +.idea/artifacts/kotlinx_cli_jvm_* +.idea/csv-plugin.xml +.idea/libraries-with-intellij-classes.xml +.idea/misc.xml +.idea/protoeditor.xml +node_modules/ +.rpt2_cache/ +libraries/tools/kotlin-test-js-runner/lib/ +local.properties +buildSrcTmp/ +distTmp/ +outTmp/ +/test.output +/kotlin-native/dist +kotlin-ide/ \ No newline at end of file diff --git a/.idea/.gitignore b/.idea/.gitignore deleted file mode 100644 index 26d33521a..000000000 --- a/.idea/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml diff --git a/.idea/codeStyles b/.idea/codeStyles deleted file mode 100644 index ad98bfd9a..000000000 --- a/.idea/codeStyles +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/csv-plugin.xml b/.idea/csv-plugin.xml deleted file mode 100644 index 7723404b1..000000000 --- a/.idea/csv-plugin.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml deleted file mode 100644 index 5404067d2..000000000 --- a/.idea/gradle.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index 495e37055..000000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 94a25f7f4..000000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index f22bd8bb7..71d54e404 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -13,7 +13,9 @@ repositories { } dependencies { + implementation("org.junit.jupiter:junit-jupiter:5.8.1") testImplementation(kotlin("test")) + testImplementation("org.junit.jupiter:junit-jupiter:5.8.1") } tasks.test { diff --git a/lib/apiguardian-api-1.1.2.jar b/lib/apiguardian-api-1.1.2.jar new file mode 100644 index 000000000..2b678e154 Binary files /dev/null and b/lib/apiguardian-api-1.1.2.jar differ diff --git a/lib/hamcrest-core-1.3.jar b/lib/hamcrest-core-1.3.jar new file mode 100644 index 000000000..9d5fe16e3 Binary files /dev/null and b/lib/hamcrest-core-1.3.jar differ diff --git a/lib/junit-4.13.1.jar b/lib/junit-4.13.1.jar new file mode 100644 index 000000000..b376ffc16 Binary files /dev/null and b/lib/junit-4.13.1.jar differ diff --git a/lib/junit-jupiter-5.8.1.jar b/lib/junit-jupiter-5.8.1.jar new file mode 100644 index 000000000..730b9ae2f Binary files /dev/null and b/lib/junit-jupiter-5.8.1.jar differ diff --git a/lib/junit-jupiter-api-5.8.1.jar b/lib/junit-jupiter-api-5.8.1.jar new file mode 100644 index 000000000..8424eca3e Binary files /dev/null and b/lib/junit-jupiter-api-5.8.1.jar differ diff --git a/lib/junit-jupiter-engine-5.8.1.jar b/lib/junit-jupiter-engine-5.8.1.jar new file mode 100644 index 000000000..cfa38d26a Binary files /dev/null and b/lib/junit-jupiter-engine-5.8.1.jar differ diff --git a/lib/junit-jupiter-params-5.8.1.jar b/lib/junit-jupiter-params-5.8.1.jar new file mode 100644 index 000000000..1e4d0ec49 Binary files /dev/null and b/lib/junit-jupiter-params-5.8.1.jar differ diff --git a/lib/junit-platform-commons-1.8.1.jar b/lib/junit-platform-commons-1.8.1.jar new file mode 100644 index 000000000..20185cd63 Binary files /dev/null and b/lib/junit-platform-commons-1.8.1.jar differ diff --git a/lib/junit-platform-engine-1.8.1.jar b/lib/junit-platform-engine-1.8.1.jar new file mode 100644 index 000000000..54ce07669 Binary files /dev/null and b/lib/junit-platform-engine-1.8.1.jar differ diff --git a/lib/opentest4j-1.2.0.jar b/lib/opentest4j-1.2.0.jar new file mode 100644 index 000000000..d5006361a Binary files /dev/null and b/lib/opentest4j-1.2.0.jar differ diff --git a/src/main/kotlin/Main.kt b/src/main/kotlin/Main.kt index c1caa623d..1beb81fc0 100644 --- a/src/main/kotlin/Main.kt +++ b/src/main/kotlin/Main.kt @@ -1,22 +1,11 @@ import dataSource.CsvDataSource import dataSource.utils.CsvParser -import interactor.CostOfLivingDataSource -import interactor.GetCityHasCheapestInternetConnectionInteractor -import interactor.GetHighestSalaryAverageCititesNamesInteractor +import interactor.* +import ui.UserInterface fun main() { val csvParser = CsvParser() val dataSource: CostOfLivingDataSource = CsvDataSource(csvParser) - - val getHighestSalaryAverageCities = GetHighestSalaryAverageCititesNamesInteractor(dataSource) - println(getHighestSalaryAverageCities.execute(limit = 10)) - printSeparationLine() - - val getCityHasCheapestInternetConnectionInteractor = GetCityHasCheapestInternetConnectionInteractor(dataSource) - println(getCityHasCheapestInternetConnectionInteractor.execute()) - -} -private fun printSeparationLine(){ - print("\n_______________________________\n") + UserInterface(dataSource).init() } diff --git a/src/main/kotlin/interactor/GetAverageFruitAndVegetablesInteractor.kt b/src/main/kotlin/interactor/GetAverageFruitAndVegetablesInteractor.kt new file mode 100644 index 000000000..e08867a1b --- /dev/null +++ b/src/main/kotlin/interactor/GetAverageFruitAndVegetablesInteractor.kt @@ -0,0 +1,28 @@ +package interactor + +import model.CityEntity + +class GetAverageFruitAndVegetablesInteractor(private val dataSource: CostOfLivingDataSource) { + + operator fun invoke(limit: Int): List { + return dataSource + .getAllCitiesData() + .filter(::excludeNullFruitVegPriceAndNullSalaries) + .sortedBy(::calculateTheRatioBetweenFruitVegPriceAndSalary) + .take(limit) + .map(CityEntity::cityName) + } + + fun excludeNullFruitVegPriceAndNullSalaries(city: CityEntity) = + checkNullableFruitAndVegetablePrices(city) && city.averageMonthlyNetSalaryAfterTax != null + + private fun checkNullableFruitAndVegetablePrices(city: CityEntity) = + with(city.fruitAndVegetablesPrices) { + apples1kg != null && banana1kg != null && oranges1kg != null && tomato1kg != null + && potato1kg != null && onion1kg != null && lettuceOneHead != null + } + + private fun calculateTheRatioBetweenFruitVegPriceAndSalary(city: CityEntity) = + city.fruitAndVegetablesPrices.getAverageFruitsAndVegetablesPrice() / city.averageMonthlyNetSalaryAfterTax!! + +} diff --git a/src/main/kotlin/interactor/GetBestCitiesForBuyingSoftDrinksInteractor.kt b/src/main/kotlin/interactor/GetBestCitiesForBuyingSoftDrinksInteractor.kt new file mode 100644 index 000000000..65de7fbcc --- /dev/null +++ b/src/main/kotlin/interactor/GetBestCitiesForBuyingSoftDrinksInteractor.kt @@ -0,0 +1,50 @@ +package interactor + +import model.CityEntity + +class GetBestCitiesForBuyingSoftDrinksInteractor(private val dataSource: CostOfLivingDataSource) { + + operator fun invoke(limit : Int): List { + + return dataSource.getAllCitiesData() + .filter(::excludeNullRequireValues) + .takeIf { it.isNotEmpty() && limit > 0 } + ?.run { + sortedByDescending(::calculateNumberOfSoftDrinksCanBuy) + .take(limit) + } ?: throw IllegalStateException("List of cities is invalid or limit below zero") + } + + private fun excludeNullRequireValues(city: CityEntity): Boolean { + + return with(city.realEstatesPrices) { + apartment3BedroomsInCityCentre != null && + apartment3BedroomsOutsideOfCentre != null && + apartmentOneBedroomInCityCentre != null && + apartmentOneBedroomOutsideOfCentre != null } && + city.averageMonthlyNetSalaryAfterTax != null && + city.drinksPrices.cokePepsiAThirdOfLiterBottleInRestaurants != null + } + + private fun calculateNumberOfSoftDrinksCanBuy(city: CityEntity): Int { + + return ((city.averageMonthlyNetSalaryAfterTax!! - LIVING_COST - getMinimumRealEstatesPrice(city) + ) / city.drinksPrices.cokePepsiAThirdOfLiterBottleInRestaurants!!).toInt() + } + private fun getMinimumRealEstatesPrice(city: CityEntity): Float { + + return with(city.realEstatesPrices) { + minOf( + apartment3BedroomsInCityCentre!!, + apartment3BedroomsOutsideOfCentre!!, + apartmentOneBedroomOutsideOfCentre!!, + apartmentOneBedroomInCityCentre!! + ) + } + } + + private companion object { + + const val LIVING_COST = 500.0f + } +} \ No newline at end of file diff --git a/src/main/kotlin/interactor/GetBestCitiesToFashionShoppingInteractor.kt b/src/main/kotlin/interactor/GetBestCitiesToFashionShoppingInteractor.kt new file mode 100644 index 000000000..9e398dc22 --- /dev/null +++ b/src/main/kotlin/interactor/GetBestCitiesToFashionShoppingInteractor.kt @@ -0,0 +1,34 @@ +package interactor + +import model.CityEntity +import model.ClothesPrices + + + +class GetBestCitiesToFashionShoppingInteractor(private val dataSource: CostOfLivingDataSource) { + + fun execute(): List { + return dataSource.getAllCitiesData() + .filter(::excludeNullClothesBrandPrices) + .sortedBy { + it.clothesPrices.findAveragePrices() + } + .take(5) + .map { it.cityName } + + } + + private fun excludeNullClothesBrandPrices(city: CityEntity): Boolean { + return city.clothesPrices.oneSummerDressInAChainStoreZaraHAndM != null && + city.clothesPrices.onePairOfNikeRunningShoesMidRange != null && + city.clothesPrices.onePairOfJeansLevis50oneOrSimilar != null + } + + private fun ClothesPrices.findAveragePrices(): Float { + return listOfNotNull( + onePairOfJeansLevis50oneOrSimilar, + oneSummerDressInAChainStoreZaraHAndM, + onePairOfNikeRunningShoesMidRange, + ).average().toFloat() + } +} \ No newline at end of file diff --git a/src/main/kotlin/interactor/GetBestCityForSavingMoneyInteractor.kt b/src/main/kotlin/interactor/GetBestCityForSavingMoneyInteractor.kt new file mode 100644 index 000000000..b96d7ee26 --- /dev/null +++ b/src/main/kotlin/interactor/GetBestCityForSavingMoneyInteractor.kt @@ -0,0 +1,45 @@ +package interactor + +import model.CityEntity + +class GetBestCityForSavingMoneyInteractor(private val dataSource: CostOfLivingDataSource) { + + operator fun invoke(): CityEntity{ + + return dataSource.getAllCitiesData() + .filter(::excludeNullRequireValues) + .sortedByDescending(::calculateSavings) + .first() + } + + private fun calculateSavings(city: CityEntity): Float { + + return city.averageMonthlyNetSalaryAfterTax!! * DOUBLE_AVERAGE_SALARY - + city.realEstatesPrices.apartment3BedroomsInCityCentre!! - + with(city.foodPrices){ + (loafOfFreshWhiteBread500g!! * REQUIRE_BREAD) - + (chickenFillets1kg!! * REQUIRE_CHICKEN) - + (riceWhite1kg!! * REQUIRE_RICE) - + (beefRound1kgOrEquivalentBackLegRedMeat!! * REQUIRE_MEAT) - + city.foodPrices.localCheese1kg!! } - OTHER_NEEDS + } + private fun excludeNullRequireValues(city: CityEntity): Boolean { + + return city.realEstatesPrices.apartment3BedroomsInCityCentre != null && + city.averageMonthlyNetSalaryAfterTax != null && + city.foodPrices.loafOfFreshWhiteBread500g != null && + city.foodPrices.localCheese1kg != null && + city.foodPrices.beefRound1kgOrEquivalentBackLegRedMeat != null && + city.foodPrices.chickenFillets1kg != null && + city.foodPrices.riceWhite1kg != null + } + private companion object{ + + const val REQUIRE_BREAD = 30 + const val REQUIRE_MEAT = 4 + const val REQUIRE_RICE = 2 + const val REQUIRE_CHICKEN = 10 + const val OTHER_NEEDS = 250.0F + const val DOUBLE_AVERAGE_SALARY = 2 + } +} \ No newline at end of file diff --git a/src/main/kotlin/interactor/GetCitiesAverageSalary.kt b/src/main/kotlin/interactor/GetCitiesAverageSalary.kt new file mode 100644 index 000000000..ed5837609 --- /dev/null +++ b/src/main/kotlin/interactor/GetCitiesAverageSalary.kt @@ -0,0 +1,28 @@ +package interactor + +import model.CityEntity + +class GetCitiesAverageSalary(private val dataSource: CostOfLivingDataSource) { + + fun execute(country: String): List> { + + val countryData = dataSource.getAllCitiesData().filter { + excludeNullSalariesAndLowQualityDataAndCheckCountriesName(it, country) + } + + return if (countryData.isNotEmpty()) { + countryData.map { + Pair(it.cityName, it.averageMonthlyNetSalaryAfterTax!!.toDouble()) + } + } else { + throw IllegalArgumentException("Invalid country name.") + } + } + + private fun excludeNullSalariesAndLowQualityDataAndCheckCountriesName(city: CityEntity, country: String): Boolean { + return city.averageMonthlyNetSalaryAfterTax != null && city.dataQuality + && city.country.equals(country, ignoreCase = true) + } + + +} \ No newline at end of file diff --git a/src/main/kotlin/interactor/GetCitiesNamesWithCheapestBananaPricesInteractor.kt b/src/main/kotlin/interactor/GetCitiesNamesWithCheapestBananaPricesInteractor.kt new file mode 100644 index 000000000..406ffdf47 --- /dev/null +++ b/src/main/kotlin/interactor/GetCitiesNamesWithCheapestBananaPricesInteractor.kt @@ -0,0 +1,28 @@ +package interactor + +import model.CityEntity + +class GetCitiesNamesWithCheapestBananaPricesInteractor(private val dataSource: CostOfLivingDataSource) { + + operator fun invoke(vararg cities: CityEntity): List { + return dataSource.getAllCitiesData() + .filter { isNotNullBananaPrice(it) && isContainsCitiesNames(it, cities.toList()) } + .sortedBy { it.fruitAndVegetablesPrices.banana1kg } + .map(CityEntity::cityName) + .takeIf { it.isNotEmpty() } + ?: throw IllegalStateException("maybe you entered invalid countries or something wrong in our server!") + } + + private fun isNotNullBananaPrice(city: CityEntity): Boolean { + return city.fruitAndVegetablesPrices.banana1kg != null + } + + private fun isContainsCitiesNames(city: CityEntity, cities: List): Boolean { + return city.cityName.toLowercase() in cities.map { it.cityName.toLowercase() } + } + + private fun String.toLowercase(): String { + return lowercase().trim() + } + +} \ No newline at end of file diff --git a/src/main/kotlin/interactor/GetCityHasCheapestInternetConnectionInteractor.kt b/src/main/kotlin/interactor/GetCityHasCheapestInternetConnectionInteractor.kt index f7c4ec816..222e4f580 100644 --- a/src/main/kotlin/interactor/GetCityHasCheapestInternetConnectionInteractor.kt +++ b/src/main/kotlin/interactor/GetCityHasCheapestInternetConnectionInteractor.kt @@ -3,13 +3,24 @@ package interactor import model.CityEntity class GetCityHasCheapestInternetConnectionInteractor( - private val dataSource: CostOfLivingDataSource, + private val dataSource: CostOfLivingDataSource ) { - fun execute(): CityEntity{ - throw Throwable("Not Implemented yet") + operator fun invoke(): CityEntity { + return dataSource.getAllCitiesData() + .filter(::excludeNullSalariesAndNullInternetPriceAndLowQualityData) + .minByOrNull (::calculateInternetPercent) + ?: throw IllegalStateException("Invalid data") } + private fun excludeNullSalariesAndNullInternetPriceAndLowQualityData(city: CityEntity): Boolean { + return city.dataQuality && city.averageMonthlyNetSalaryAfterTax != null + && city.servicesPrices.internet60MbpsOrMoreUnlimitedDataCableAdsl != null + } + private fun calculateInternetPercent(city: CityEntity): Float { + return (city.servicesPrices.internet60MbpsOrMoreUnlimitedDataCableAdsl!! + .div(city.averageMonthlyNetSalaryAfterTax!!)) + } -} \ No newline at end of file +} diff --git a/src/main/kotlin/interactor/GetCityThatMatchTheManagerExpectationsInteractor.kt b/src/main/kotlin/interactor/GetCityThatMatchTheManagerExpectationsInteractor.kt new file mode 100644 index 000000000..5461e4872 --- /dev/null +++ b/src/main/kotlin/interactor/GetCityThatMatchTheManagerExpectationsInteractor.kt @@ -0,0 +1,61 @@ +package interactor + +import model.CityEntity +import java.util.* + + +class GetCityThatMatchTheManagerExpectationsInteractor( + private val dataSource: CostOfLivingDataSource +) { + + fun execute(countries: List): CityEntity? { + val existCountries = countries.map(::formatCountriesNames) + .filter { selectedCountries.contains(it) } + + val pricesOfMeals = mutableListOf() + + return if (existCountries.isNotEmpty()) { + dataSource + .getAllCitiesData() + .filter { it.country in existCountries } + .filter(::excludeNullPricesOfMeals) + .onEach { + pricesOfMeals.add(it.mealsPrices.mealFor2PeopleMidRangeRestaurant!!) + }.let { citiesEntity -> + getCityThatMatchExpectations(pricesOfMeals, citiesEntity) + } + } else { + null + } + } + + + private fun formatCountriesNames(countryName: String): String { + return countryName.lowercase() + .trim() + .split("\\s+".toRegex()) + .joinToString(" ") { + it.replaceFirstChar { char -> + if (char.isLowerCase()) char.titlecase(Locale.getDefault()) else it + } + } + } + + private fun excludeNullPricesOfMeals(city: CityEntity): Boolean { + return city.mealsPrices.mealFor2PeopleMidRangeRestaurant != null + } + + private fun getCityThatMatchExpectations( + pricesOfMeals: MutableList, + citiesEntity: List + ): CityEntity { + val midPriceOfMeals = (pricesOfMeals.maxOf { it } - pricesOfMeals.minOf { it }).div(2) + return citiesEntity + .filter { it.mealsPrices.mealFor2PeopleMidRangeRestaurant!! >= midPriceOfMeals } + .sortedBy { it.mealsPrices.mealFor2PeopleMidRangeRestaurant }.first() + } + + companion object { + private val selectedCountries = listOf("United States", "Canada", "Mexico") + } +} \ No newline at end of file diff --git a/src/main/kotlin/interactor/GetCostlierCityInteractor.kt b/src/main/kotlin/interactor/GetCostlierCityInteractor.kt new file mode 100644 index 000000000..8fe3b34b5 --- /dev/null +++ b/src/main/kotlin/interactor/GetCostlierCityInteractor.kt @@ -0,0 +1,32 @@ +package interactor + +import model.CityEntity + + +class GetCostlierCityInteractor( + + private val dataSource: CostOfLivingDataSource, +) { + fun execute(): CityEntity { + return dataSource.getAllCitiesData() + .filter(::excludeNullValuesAndLowQualityData) + .maxByOrNull(::calculateTheRatioBetweenThePriceOfApartmentsInsideAndOutsideTheCity) + ?: throw Exception("Invalid Data") + } + + private fun excludeNullValuesAndLowQualityData(city: CityEntity): Boolean { + return city.dataQuality && with(city.realEstatesPrices) { + apartmentOneBedroomInCityCentre != null && + apartmentOneBedroomOutsideOfCentre != null && + apartment3BedroomsInCityCentre != null && + apartment3BedroomsOutsideOfCentre != null + } + } + + private fun calculateTheRatioBetweenThePriceOfApartmentsInsideAndOutsideTheCity(city: CityEntity): Float { + return with(city.realEstatesPrices) { + (apartmentOneBedroomInCityCentre!! + apartment3BedroomsInCityCentre!!) / + (apartment3BedroomsOutsideOfCentre!! + apartmentOneBedroomOutsideOfCentre!!) + } + } +} \ No newline at end of file diff --git a/src/main/kotlin/interactor/GetTopCitiesHasCheapestPriceOfApartmentsAndYearInteractor.kt b/src/main/kotlin/interactor/GetTopCitiesHasCheapestPriceOfApartmentsAndYearInteractor.kt new file mode 100644 index 000000000..73443bc70 --- /dev/null +++ b/src/main/kotlin/interactor/GetTopCitiesHasCheapestPriceOfApartmentsAndYearInteractor.kt @@ -0,0 +1,53 @@ +package interactor + +import model.CityEntity +import kotlin.math.roundToInt + +class GetTopCitiesHasCheapestPriceOfApartmentsAndYearInteractor( + private val dataSource: CostOfLivingDataSource +) { + operator fun invoke(limit: Int): List> { + return dataSource.getAllCitiesData() + .filter(::excludeNullNetSalaryAndPricePerSquareMeterAndLowDataQuality) + .takeIf { it.isNotEmpty() && limit > 0 } + ?.run { + asSequence() + .distinctBy { it.cityName } + .map(::makeAPairOfCityNameAndCountOfYears) + .sortedBy { it.second } + .take(limit).toList() + } + ?: throw Exception("Empty Data") + + } + + private fun makeAPairOfCityNameAndCountOfYears(city: CityEntity): Pair { + return Pair( + city.cityName, calculateCountOfYearsToBuyApartment(city, city.averageMonthlyNetSalaryAfterTax!!) + ) + } + + private fun excludeNullNetSalaryAndPricePerSquareMeterAndLowDataQuality(city: CityEntity): Boolean { + return city.averageMonthlyNetSalaryAfterTax != null && + city.realEstatesPrices.pricePerSquareMeterToBuyApartmentOutsideOfCentre != null && + city.dataQuality + } + + private fun calculateCountOfYearsToBuyApartment(city: CityEntity, salary: Float): Float { + return getTheNearestFiveNumberAfterTheSign( + (city + .realEstatesPrices.pricePerSquareMeterToBuyApartmentOutsideOfCentre!! + .times(100)) + .div(salary) + .div(12) + ) + } + + private fun getTheNearestFiveNumberAfterTheSign(number: Float): Float { + return number.times(100000) + .roundToInt() + .div(100000.0).toFloat() + } + + +} \ No newline at end of file diff --git a/src/main/kotlin/interactor/GetTopTenCountriesTaxesInteractor.kt b/src/main/kotlin/interactor/GetTopTenCountriesTaxesInteractor.kt new file mode 100644 index 000000000..53bef40b6 --- /dev/null +++ b/src/main/kotlin/interactor/GetTopTenCountriesTaxesInteractor.kt @@ -0,0 +1,40 @@ +package interactor + +import model.CityEntity + + +class GetTopTenCountriesTaxesInteractor(private val dataSource : CostOfLivingDataSource) { + fun execute() : List> { + return dataSource.getAllCitiesData() + .filter(::excludeNullCokePepsiAndLowQualityData) + .groupBy { it.country } + .mapValues{ + calculateAvgDrinkPrices(it.value) + } + .toList() + .sortedByDescending { (_, avgPrice) -> avgPrice } + .take(10).map { (country, avgPrice) -> Pair(country, avgPrice.toFloat()) } + } + + private fun excludeNullCokePepsiAndLowQualityData(city : CityEntity) : Boolean { + return city.drinksPrices.cokePepsiAThirdOfLiterBottleInRestaurants != null && city.dataQuality + } + + private fun calculateAvgDrinkPrices( countries : List) : Double { + return countries.sumOf { it.drinksPrices.cokePepsiAThirdOfLiterBottleInRestaurants!!.toDouble() } .div(countries.size) + } + +} + + + + + + + + + + + + + diff --git a/src/main/kotlin/interactor/plus/GetCityNameWithCheapestTennisOnWeekendInteractor.kt b/src/main/kotlin/interactor/plus/GetCityNameWithCheapestTennisOnWeekendInteractor.kt new file mode 100644 index 000000000..345a498cd --- /dev/null +++ b/src/main/kotlin/interactor/plus/GetCityNameWithCheapestTennisOnWeekendInteractor.kt @@ -0,0 +1,18 @@ +package interactor.plus + +import interactor.CostOfLivingDataSource +import model.CityEntity + +class GetCitiesNameWithCheapestTennisPriceOnWeekendInteractor( + private val dataSource: CostOfLivingDataSource +) { + operator fun invoke(limit: Int): List { + return dataSource.getAllCitiesData() + .filter { it.servicesPrices.tennisCourtRentOneHourOnWeekend != null } + .sortedBy { it.servicesPrices.tennisCourtRentOneHourOnWeekend } + .take(limit) + .map(CityEntity::cityName) + .takeIf { it.isNotEmpty() } + ?: throw IllegalStateException("Empty list!") + } +} \ No newline at end of file diff --git a/src/main/kotlin/interactor/utils/BedroomOption.kt b/src/main/kotlin/interactor/utils/BedroomOption.kt new file mode 100644 index 000000000..5b0f44829 --- /dev/null +++ b/src/main/kotlin/interactor/utils/BedroomOption.kt @@ -0,0 +1,6 @@ +package interactor.utils + +enum class BedroomOption { + ONE_BEDROOM, + THREE_BEDROOM, +} \ No newline at end of file diff --git a/src/main/kotlin/model/FruitAndVegetablesPrices.kt b/src/main/kotlin/model/FruitAndVegetablesPrices.kt index 3095107c0..7b32b00fa 100644 --- a/src/main/kotlin/model/FruitAndVegetablesPrices.kt +++ b/src/main/kotlin/model/FruitAndVegetablesPrices.kt @@ -8,4 +8,7 @@ data class FruitAndVegetablesPrices( val potato1kg: Float?, val onion1kg: Float?, val lettuceOneHead: Float?, -) +) { + fun getAverageFruitsAndVegetablesPrice() = + listOfNotNull(tomato1kg, potato1kg, lettuceOneHead, oranges1kg, onion1kg, banana1kg, apples1kg).average() +} \ No newline at end of file diff --git a/src/main/kotlin/ui/UserInterface.kt b/src/main/kotlin/ui/UserInterface.kt new file mode 100644 index 000000000..f8ce0d6dd --- /dev/null +++ b/src/main/kotlin/ui/UserInterface.kt @@ -0,0 +1,130 @@ +package ui + +import interactor.* +import interactor.utils.BedroomOption +import model.* + + +class UserInterface(private val dataSource: CostOfLivingDataSource) { + fun init() { + do { + println( + "1- Get the city that has the cheapest internet connection. \n" + + "2- Get cities with lowest fruit/veg prices compared to salaries. \n" + + "3- Get country's salaries with mixed case input.\n" + + "4- Get city with highest apartment rent difference between city center and outside.\n" + + "5- Get top 5 cities to fashion shopping famous brands for most suitable prices.\n" + + "6- Get top 10 cities names that he can buy this apartment faster.\n" + + "7- Get best cities with cheapest banana prices. \n" + + "8- Get the city that match manager expectations.\n" + + "9- Get the top 10 countries that enforce high taxes on carbonated drinks.\n" + + "10-Get the most suitable city in the world that they can have more savings per month.\n" + + "Note: for exit write 'Exit/exit' \n\n" + ) + when (readlnOrNull()) { + "1" -> { + println(GetCityHasCheapestInternetConnectionInteractor(dataSource)()) + printSeparationLine() + } + + "2" -> { + print("How many cities would you like?") + val limit = readln().toInt() + println(GetAverageFruitAndVegetablesInteractor(dataSource)(limit)) + printSeparationLine() + } + + "3" -> { + print("please enter name country:-") + val nameCountry = readlnOrNull() + println(nameCountry?.let { GetCitiesAverageSalary(dataSource).execute(it) }) + printSeparationLine() + } + + "4" -> { + + println( GetCostlierCityInteractor(dataSource).execute() ) + printSeparationLine() + } + + "5" -> { + println(GetBestCitiesToFashionShoppingInteractor(dataSource).execute()) + printSeparationLine() + } + + "6" -> { + print("please enter your full time salary:-") + val fullTimeSalary = readlnOrNull()?.toDouble() + if (fullTimeSalary != null) { + println( + GetTopCitiesHasCheapestPriceOfApartmentsAndYearInteractor(dataSource) + ) + } else { + print("your input not valid, try again.") + } + printSeparationLine() + } + + "7" -> { + print("please enter cities names seperated by dash :- ") + val citiesNames = readlnOrNull() + if (citiesNames != null) { + val city = makeCities(citiesNames.split("-")) + println(GetCitiesNamesWithCheapestBananaPricesInteractor(dataSource)(*city)) + } else { + print("your input not valid, try again.") + } + printSeparationLine() + } + + "8" -> { + print("please enter list name countries :-") + print("example iraq, usa:-") + val countries = readlnOrNull().toString().split(",") + if (countries.isNotEmpty()) { + print(GetCityThatMatchTheManagerExpectationsInteractor(dataSource).execute(countries)) + } else { + print("your input not valid, try again.") + } + printSeparationLine() + } + + "9" -> { + println(GetTopTenCountriesTaxesInteractor(dataSource).execute()) + printSeparationLine() + } + + "10" -> { + + println(GetBestCityForSavingMoneyInteractor(dataSource)()) + } + + "Exit", "exit" -> { + break + } + } + + + } while (true) + } + + private fun printSeparationLine() { + print("\n_______________________________\n") + } +} + +fun makeCities(cityNames: List) = cityNames.map { + CityEntity( + it, "", + MealsPrices(null, null, null), + DrinksPrices(null, null, null, null, null), + FruitAndVegetablesPrices(null, null, null, null, null, null, null), + FoodPrices(null, null, null, null, null, null), + ServicesPrices(null, null, null, null, null, null, null, null), + ClothesPrices(null, null, null, null), + TransportationsPrices(null, null, null, null, null, null), + CarsPrices(null, null), + RealEstatesPrices(null, null, null, null, null, null), + null, false + ) +}.toTypedArray() diff --git a/src/test/kotlin/data/AverageMonthlyNetSalaryFakeData.kt b/src/test/kotlin/data/AverageMonthlyNetSalaryFakeData.kt new file mode 100644 index 000000000..c4224eeac --- /dev/null +++ b/src/test/kotlin/data/AverageMonthlyNetSalaryFakeData.kt @@ -0,0 +1,163 @@ +package data + +import interactor.CostOfLivingDataSource +import model.* + + +class AverageMonthlyNetSalaryFakeData : CostOfLivingDataSource { + override fun getAllCitiesData(): List { + return listOf( + CityEntity( + cityName = "Moncks Corner", + country = "United States", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 14.5f, + mealFor2PeopleMidRangeRestaurant = 40.0f, + mealAtMcDonaldSOrEquivalent = 7.5f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 4.33f, + cokePepsiAThirdOfLiterBottleInRestaurants = 1.0f, + waterAThirdOfLiterBottleInRestaurants = 1.0f, + milkRegularOneLiter = 0.91f, + waterOneAndHalfLiterBottleAtTheMarket = 1.75f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 0.1f, + banana1kg = 0.1f, + oranges1kg = 0.1f, + tomato1kg = 0.1f, + potato1kg = 0.1f, + onion1kg = 0.1f, + lettuceOneHead = 0.1f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 2.2f, + riceWhite1kg = 2.62f, + eggsRegular12 = 2.17f, + localCheese1kg = 11.02f, + chickenFillets1kg = 8.8f, + beefRound1kgOrEquivalentBackLegRedMeat = 15.76f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 144.92f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.0f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 67.78f, + fitnessClubMonthlyFeeForOneAdult = null, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 9.0f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 1500.0f, + internationalPrimarySchoolYearlyForOneChild = null + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 52.0f, + oneSummerDressInAChainStoreZaraHAndM = 46.33f, + onePairOfNikeRunningShoesMidRange = 94.67f, + onePairOfMenLeatherBusinessShoes = 90.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 2.1f, + taxi1kmNormalTariff = 1.49f, + taxi1hourWaitingNormalTariff = 15.0f, + gasolineOneLiter = 0.92f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = null, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 28500.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = null, + dataQuality = false + ), + CityEntity( + cityName = "Moncks Corner", + country = "United States", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 14.5f, + mealFor2PeopleMidRangeRestaurant = 40.0f, + mealAtMcDonaldSOrEquivalent = 7.5f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 4.33f, + cokePepsiAThirdOfLiterBottleInRestaurants = 1.0f, + waterAThirdOfLiterBottleInRestaurants = 1.0f, + milkRegularOneLiter = 0.91f, + waterOneAndHalfLiterBottleAtTheMarket = 1.75f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 0.1f, + banana1kg = 0.1f, + oranges1kg = 0.1f, + tomato1kg = 0.1f, + potato1kg = 0.1f, + onion1kg = 0.1f, + lettuceOneHead = 0.1f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 2.2f, + riceWhite1kg = 2.62f, + eggsRegular12 = 2.17f, + localCheese1kg = 11.02f, + chickenFillets1kg = 8.8f, + beefRound1kgOrEquivalentBackLegRedMeat = 15.76f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 144.92f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.0f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 67.78f, + fitnessClubMonthlyFeeForOneAdult = null, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 9.0f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 1500.0f, + internationalPrimarySchoolYearlyForOneChild = null + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 52.0f, + oneSummerDressInAChainStoreZaraHAndM = 46.33f, + onePairOfNikeRunningShoesMidRange = 94.67f, + onePairOfMenLeatherBusinessShoes = 90.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 2.1f, + taxi1kmNormalTariff = 1.49f, + taxi1hourWaitingNormalTariff = 15.0f, + gasolineOneLiter = 0.92f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = null, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 28500.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = Float.NaN, + dataQuality = false + ) + ) + + } +} + + + + + + + + diff --git a/src/test/kotlin/data/BananaCheapestFakeData.kt b/src/test/kotlin/data/BananaCheapestFakeData.kt new file mode 100644 index 000000000..b574d4f98 --- /dev/null +++ b/src/test/kotlin/data/BananaCheapestFakeData.kt @@ -0,0 +1,299 @@ +package data + +import interactor.CostOfLivingDataSource +import model.* + + +object BananaCheapestFakeData : CostOfLivingDataSource { + + //region helper functions + fun citiesListOf(vararg citiesNames: String) = citiesNames.map(::makeCity).toTypedArray() + fun makeCity(cityName: String) = + CityEntity( + cityName, "Cuba", MealsPrices( + mealInexpensiveRestaurant = 6.5f, + mealFor2PeopleMidRangeRestaurant = 15.0f, + mealAtMcDonaldSOrEquivalent = 5.0f + ), DrinksPrices( + cappuccinoRegularInRestaurants = 2.0f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.0f, + waterAThirdOfLiterBottleInRestaurants = 1.0f, + milkRegularOneLiter = 3.8f, + waterOneAndHalfLiterBottleAtTheMarket = 2.0f + ), FruitAndVegetablesPrices( + apples1kg = 11.02f, + banana1kg = 0.44f, + oranges1kg = 1.1f, + tomato1kg = 0.88f, + potato1kg = 1.1f, + onion1kg = 2.2f, + lettuceOneHead = 0.25f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 1.1f, + riceWhite1kg = 1.1f, + eggsRegular12 = 2.03f, + localCheese1kg = 9.0f, + chickenFillets1kg = 6.61f, + beefRound1kgOrEquivalentBackLegRedMeat = 6.61f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = null, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.1f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = null, + fitnessClubMonthlyFeeForOneAdult = null, + tennisCourtRentOneHourOnWeekend = 1f, + cinemaInternationalReleaseOneSeat = 1.0f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = null, + internationalPrimarySchoolYearlyForOneChild = null + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 40.0f, + oneSummerDressInAChainStoreZaraHAndM = 40.0f, + onePairOfNikeRunningShoesMidRange = 60.0f, + onePairOfMenLeatherBusinessShoes = 50.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = null, + taxi1kmNormalTariff = 0.7f, + taxi1hourWaitingNormalTariff = null, + gasolineOneLiter = null + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = null, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = null + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = 600.0f, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = 18f, + dataQuality = true + ) + // endregion + + + override fun getAllCitiesData(): List { + return listOf( + CityEntity( + cityName = "Santiago de Cuba", + country = "Cuba", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 6.5f, + mealFor2PeopleMidRangeRestaurant = 15.0f, + mealAtMcDonaldSOrEquivalent = 5.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 2.0f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.0f, + waterAThirdOfLiterBottleInRestaurants = 1.0f, + milkRegularOneLiter = 3.8f, + waterOneAndHalfLiterBottleAtTheMarket = 2.0f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 11.02f, + banana1kg = 0.44f, + oranges1kg = 1.1f, + tomato1kg = 0.88f, + potato1kg = 1.1f, + onion1kg = 2.2f, + lettuceOneHead = 0.25f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 1.1f, + riceWhite1kg = 1.1f, + eggsRegular12 = 2.03f, + localCheese1kg = 9.0f, + chickenFillets1kg = 6.61f, + beefRound1kgOrEquivalentBackLegRedMeat = 6.61f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = null, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.1f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = null, + fitnessClubMonthlyFeeForOneAdult = null, + tennisCourtRentOneHourOnWeekend = 2f, + cinemaInternationalReleaseOneSeat = 1.0f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = null, + internationalPrimarySchoolYearlyForOneChild = null + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 40.0f, + oneSummerDressInAChainStoreZaraHAndM = 40.0f, + onePairOfNikeRunningShoesMidRange = 60.0f, + onePairOfMenLeatherBusinessShoes = 50.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = null, + taxi1kmNormalTariff = 0.7f, + taxi1hourWaitingNormalTariff = null, + gasolineOneLiter = null + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = null, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = null + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = 600.0f, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = 18f, + dataQuality = false + ), + CityEntity( + cityName = "Sancti Spiritus", + country = "Cuba", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 7.0f, + mealFor2PeopleMidRangeRestaurant = 25.0f, + mealAtMcDonaldSOrEquivalent = 5.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = null, + cokePepsiAThirdOfLiterBottleInRestaurants = 1.0f, + waterAThirdOfLiterBottleInRestaurants = 0.75f, + milkRegularOneLiter = null, + waterOneAndHalfLiterBottleAtTheMarket = 1.0f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 3.0f, + banana1kg = 0.5f, + oranges1kg = 0.5f, + tomato1kg = 1.0f, + potato1kg = 2.0f, + onion1kg = 2.0f, + lettuceOneHead = null + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = null, + riceWhite1kg = 1.0f, + eggsRegular12 = 2.4f, + localCheese1kg = 4.0f, + chickenFillets1kg = 5.0f, + beefRound1kgOrEquivalentBackLegRedMeat = 10.0f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 30.0f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = null, + internet60MbpsOrMoreUnlimitedDataCableAdsl = null, + fitnessClubMonthlyFeeForOneAdult = null, + tennisCourtRentOneHourOnWeekend = 3f, + cinemaInternationalReleaseOneSeat = null, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = null, + internationalPrimarySchoolYearlyForOneChild = null + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 25.0f, + oneSummerDressInAChainStoreZaraHAndM = 15.0f, + onePairOfNikeRunningShoesMidRange = 40.0f, + onePairOfMenLeatherBusinessShoes = 30.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 1.0f, + taxi1kmNormalTariff = 1.0f, + taxi1hourWaitingNormalTariff = null, + gasolineOneLiter = 2.0f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 50000.0f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 70000.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = 20.0f, + dataQuality = false + ), + CityEntity( + cityName = "Santa Clara", + country = "Cuba", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 10.0f, + mealFor2PeopleMidRangeRestaurant = 30.0f, + mealAtMcDonaldSOrEquivalent = 5.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 1.91f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.0f, + waterAThirdOfLiterBottleInRestaurants = 0.5f, + milkRegularOneLiter = 3.52f, + waterOneAndHalfLiterBottleAtTheMarket = 0.98f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 6.24f, + banana1kg = null, + oranges1kg = 1.12f, + tomato1kg = 1.0f, + potato1kg = 1.82f, + onion1kg = 2.0f, + lettuceOneHead = 0.86f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 1.0f, + riceWhite1kg = 1.0f, + eggsRegular12 = 1.64f, + localCheese1kg = 4.0f, + chickenFillets1kg = 6.07f, + beefRound1kgOrEquivalentBackLegRedMeat = 10.0f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 11.5f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.26f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 80.0f, + fitnessClubMonthlyFeeForOneAdult = 6.0f, + tennisCourtRentOneHourOnWeekend = 4f, + cinemaInternationalReleaseOneSeat = 1.12f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 70.0f, + internationalPrimarySchoolYearlyForOneChild = 15166.67f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 55.5f, + oneSummerDressInAChainStoreZaraHAndM = 44.33f, + onePairOfNikeRunningShoesMidRange = 79.17f, + onePairOfMenLeatherBusinessShoes = 78.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 0.5f, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 1.0f, + taxi1kmNormalTariff = 0.5f, + taxi1hourWaitingNormalTariff = 15.0f, + gasolineOneLiter = 1.14f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 80000.0f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 81500.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = 25.0f, + dataQuality = false + ) + ) + } +} \ No newline at end of file diff --git a/src/test/kotlin/data/BestCityForSavingMoneyFakeData.kt b/src/test/kotlin/data/BestCityForSavingMoneyFakeData.kt new file mode 100644 index 000000000..96f3de4f0 --- /dev/null +++ b/src/test/kotlin/data/BestCityForSavingMoneyFakeData.kt @@ -0,0 +1,320 @@ +package data + +import interactor.CostOfLivingDataSource +import model.* + + +object BestCityForSavingMoneyFakeData : CostOfLivingDataSource { + override fun getAllCitiesData(): List { + + return listOf( + CityEntity( + cityName = "Moncks Corner", + country = "United States", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 14.5f, + mealFor2PeopleMidRangeRestaurant = 40.0f, + mealAtMcDonaldSOrEquivalent = 7.5f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 4.33f, + cokePepsiAThirdOfLiterBottleInRestaurants = 0.2f, + waterAThirdOfLiterBottleInRestaurants = 1.0f, + milkRegularOneLiter = 0.91f, + waterOneAndHalfLiterBottleAtTheMarket = 1.75f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 0.1f, + banana1kg = 0.1f, + oranges1kg = 0.1f, + tomato1kg = 0.1f, + potato1kg = 0.1f, + onion1kg = 0.1f, + lettuceOneHead = 0.1f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 2.2f, + riceWhite1kg = 2.62f, + eggsRegular12 = 2.17f, + localCheese1kg = 11.02f, + chickenFillets1kg = 8.8f, + beefRound1kgOrEquivalentBackLegRedMeat = 15.76f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 144.92f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.0f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 67.78f, + fitnessClubMonthlyFeeForOneAdult = null, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 9.0f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 1500.0f, + internationalPrimarySchoolYearlyForOneChild = null + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 52.0f, + oneSummerDressInAChainStoreZaraHAndM = 46.33f, + onePairOfNikeRunningShoesMidRange = 94.67f, + onePairOfMenLeatherBusinessShoes = 90.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 2.1f, + taxi1kmNormalTariff = 1.49f, + taxi1hourWaitingNormalTariff = 15.0f, + gasolineOneLiter = 0.92f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = null, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 28500.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = 1000.0f, + apartmentOneBedroomOutsideOfCentre = 100.0f, + apartment3BedroomsInCityCentre = 1000.0f, + apartment3BedroomsOutsideOfCentre = 100.0f, + pricePerSquareMeterToBuyApartmentInCityCentre = 1111.1f, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 1111.1f + ), + averageMonthlyNetSalaryAfterTax = 90000000.0f, + dataQuality = false + ), + + + CityEntity( + cityName = "Keller", + country = "United States", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 30.0f, + mealFor2PeopleMidRangeRestaurant = 75.0f, + mealAtMcDonaldSOrEquivalent = 7.5f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 5.33f, + cokePepsiAThirdOfLiterBottleInRestaurants = 1.5f, + waterAThirdOfLiterBottleInRestaurants = 1.17f, + milkRegularOneLiter = 0.88f, + waterOneAndHalfLiterBottleAtTheMarket = 3.0f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 4.13f, + banana1kg = 1.33f, + oranges1kg = 5.75f, + tomato1kg = 6.03f, + potato1kg = 4.05f, + onion1kg = 3.36f, + lettuceOneHead = 1.59f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 2.84f, + riceWhite1kg = 3.98f, + eggsRegular12 = 3.0f, + localCheese1kg = 15.08f, + chickenFillets1kg = 7.61f, + beefRound1kgOrEquivalentBackLegRedMeat = 18.7f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 210.09f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = null, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 67.8f, + fitnessClubMonthlyFeeForOneAdult = 39.0f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 9.5f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 1125.0f, + internationalPrimarySchoolYearlyForOneChild = null + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 47.5f, + oneSummerDressInAChainStoreZaraHAndM = 26.0f, + onePairOfNikeRunningShoesMidRange = 92.5f, + onePairOfMenLeatherBusinessShoes = 200.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 3.12f, + taxi1kmNormalTariff = 1.12f, + taxi1hourWaitingNormalTariff = 18.0f, + gasolineOneLiter = 0.99f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 29880.0f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 20425.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = 1521.67f, + apartmentOneBedroomOutsideOfCentre = 1111.1f, + apartment3BedroomsInCityCentre = 3200.0f, + apartment3BedroomsOutsideOfCentre = 1111.1f, + pricePerSquareMeterToBuyApartmentInCityCentre = 1111.1f, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 1111.1f + ), + averageMonthlyNetSalaryAfterTax = 5555.5f, + dataQuality = false + ), + + + CityEntity( + cityName = "Malden", + country = "United States", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = null, + mealFor2PeopleMidRangeRestaurant = null, + mealAtMcDonaldSOrEquivalent = 7.5f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 4.5f, + cokePepsiAThirdOfLiterBottleInRestaurants = null, + waterAThirdOfLiterBottleInRestaurants = 2.0f, + milkRegularOneLiter = null, + waterOneAndHalfLiterBottleAtTheMarket = 1.33f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 4.92f, + banana1kg = 2.0f, + oranges1kg = 6.61f, + tomato1kg = 5.51f, + potato1kg = 5.51f, + onion1kg = 4.4f, + lettuceOneHead = 2.03f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = null, + riceWhite1kg = 6.17f, + eggsRegular12 = null, + localCheese1kg = 9.92f, + chickenFillets1kg = null, + beefRound1kgOrEquivalentBackLegRedMeat = null + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 221.47f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = null, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 67.8f, + fitnessClubMonthlyFeeForOneAdult = null, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 12.0f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = null, + internationalPrimarySchoolYearlyForOneChild = 5000.0f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 51.66f, + oneSummerDressInAChainStoreZaraHAndM = 50.0f, + onePairOfNikeRunningShoesMidRange = 69.99f, + onePairOfMenLeatherBusinessShoes = 104.67f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 2.5f, + monthlyPassRegularPrice = 84.0f, + taxiStartNormalTariff = null, + taxi1kmNormalTariff = null, + taxi1hourWaitingNormalTariff = null, + gasolineOneLiter = null + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = null, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 20000.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = 10763.91f, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 6458.35f + ), + averageMonthlyNetSalaryAfterTax = 14.9f, + dataQuality = false + ), + + + CityEntity( + cityName = "Pearl City", + country = "United States", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = null, + mealFor2PeopleMidRangeRestaurant = null, + mealAtMcDonaldSOrEquivalent = 10.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 5.25f, + cokePepsiAThirdOfLiterBottleInRestaurants = 1000.0f, + waterAThirdOfLiterBottleInRestaurants = 1.44f, + milkRegularOneLiter = 2.38f, + waterOneAndHalfLiterBottleAtTheMarket = 2.08f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 5.91f, + banana1kg = 3.84f, + oranges1kg = 7.02f, + tomato1kg = 5.94f, + potato1kg = 4.95f, + onion1kg = 4.44f, + lettuceOneHead = 2.74f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 4.41f, + riceWhite1kg = 7.33f, + eggsRegular12 = null, + localCheese1kg = 12.13f, + chickenFillets1kg = null, + beefRound1kgOrEquivalentBackLegRedMeat = 26.46f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 251.16f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = null, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 68.12f, + fitnessClubMonthlyFeeForOneAdult = 60.0f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = null, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = null, + internationalPrimarySchoolYearlyForOneChild = null + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 47.55f, + oneSummerDressInAChainStoreZaraHAndM = 35.87f, + onePairOfNikeRunningShoesMidRange = 79.29f, + onePairOfMenLeatherBusinessShoes = null + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = null, + taxi1kmNormalTariff = null, + taxi1hourWaitingNormalTariff = null, + gasolineOneLiter = null + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = null, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 21105.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = 2000.0f, + apartmentOneBedroomOutsideOfCentre = 1750.0f, + apartment3BedroomsInCityCentre = 5000.0f, + apartment3BedroomsOutsideOfCentre = 4750.0f, + pricePerSquareMeterToBuyApartmentInCityCentre = 4000.0f, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 3500.0f + ), + averageMonthlyNetSalaryAfterTax = 9000.0f, + dataQuality = false + ) + + ) + + } + + val emptyData by lazy { + object : CostOfLivingDataSource { + + override fun getAllCitiesData() = emptyList() + } + } +} + + + + + + + + diff --git a/src/test/kotlin/data/CheapestApartmentsInCitiesFakeData.kt b/src/test/kotlin/data/CheapestApartmentsInCitiesFakeData.kt new file mode 100644 index 000000000..dc69b7c15 --- /dev/null +++ b/src/test/kotlin/data/CheapestApartmentsInCitiesFakeData.kt @@ -0,0 +1,1004 @@ +package data + +import interactor.CostOfLivingDataSource +import model.* + + +object CheapestApartmentsInCitiesFakeData : CostOfLivingDataSource { + override fun getAllCitiesData(): List { + return listOf( + CityEntity( + cityName = "Santiago de Cuba", + country = "Cuba", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 6.5f, + mealFor2PeopleMidRangeRestaurant = 15.0f, + mealAtMcDonaldSOrEquivalent = 5.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 2.0f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.0f, + waterAThirdOfLiterBottleInRestaurants = 1.0f, + milkRegularOneLiter = 3.8f, + waterOneAndHalfLiterBottleAtTheMarket = 2.0f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 11.02f, + banana1kg = 0.44f, + oranges1kg = 1.1f, + tomato1kg = 0.88f, + potato1kg = 1.1f, + onion1kg = 2.2f, + lettuceOneHead = 0.25f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 1.1f, + riceWhite1kg = 1.1f, + eggsRegular12 = 2.03f, + localCheese1kg = 9.0f, + chickenFillets1kg = 6.61f, + beefRound1kgOrEquivalentBackLegRedMeat = 6.61f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = null, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.1f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = null, + fitnessClubMonthlyFeeForOneAdult = null, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 1.0f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = null, + internationalPrimarySchoolYearlyForOneChild = null + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 40.0f, + oneSummerDressInAChainStoreZaraHAndM = 40.0f, + onePairOfNikeRunningShoesMidRange = 60.0f, + onePairOfMenLeatherBusinessShoes = 50.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = null, + taxi1kmNormalTariff = 0.7f, + taxi1hourWaitingNormalTariff = null, + gasolineOneLiter = null + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = null, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = null + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = 600.0f, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = 18f, + dataQuality = true + ), + + CityEntity( + cityName = "Domyat", + country = "Cuba", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 10.0f, + mealFor2PeopleMidRangeRestaurant = 30.0f, + mealAtMcDonaldSOrEquivalent = 5.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 1.91f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.0f, + waterAThirdOfLiterBottleInRestaurants = 0.5f, + milkRegularOneLiter = 3.52f, + waterOneAndHalfLiterBottleAtTheMarket = 0.98f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 6.24f, + banana1kg = null, + oranges1kg = 1.12f, + tomato1kg = 1.0f, + potato1kg = 1.82f, + onion1kg = 2.0f, + lettuceOneHead = 0.86f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 1.0f, + riceWhite1kg = 1.0f, + eggsRegular12 = 1.64f, + localCheese1kg = 4.0f, + chickenFillets1kg = 6.07f, + beefRound1kgOrEquivalentBackLegRedMeat = 10.0f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 11.5f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.26f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 80.0f, + fitnessClubMonthlyFeeForOneAdult = 6.0f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 1.12f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 70.0f, + internationalPrimarySchoolYearlyForOneChild = 15166.67f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 55.5f, + oneSummerDressInAChainStoreZaraHAndM = 44.33f, + onePairOfNikeRunningShoesMidRange = 79.17f, + onePairOfMenLeatherBusinessShoes = 78.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 0.5f, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 1.0f, + taxi1kmNormalTariff = 0.5f, + taxi1hourWaitingNormalTariff = 15.0f, + gasolineOneLiter = 1.14f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 80000.0f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 81500.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 60f + ), + averageMonthlyNetSalaryAfterTax = 25.0f, + dataQuality = true + ), CityEntity( + cityName = "Popeye Village", + country = "Cuba", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 10.0f, + mealFor2PeopleMidRangeRestaurant = 30.0f, + mealAtMcDonaldSOrEquivalent = 5.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 1.91f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.0f, + waterAThirdOfLiterBottleInRestaurants = 0.5f, + milkRegularOneLiter = 3.52f, + waterOneAndHalfLiterBottleAtTheMarket = 0.98f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 6.24f, + banana1kg = null, + oranges1kg = 1.12f, + tomato1kg = 1.0f, + potato1kg = 1.82f, + onion1kg = 2.0f, + lettuceOneHead = 0.86f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 1.0f, + riceWhite1kg = 1.0f, + eggsRegular12 = 1.64f, + localCheese1kg = 4.0f, + chickenFillets1kg = 6.07f, + beefRound1kgOrEquivalentBackLegRedMeat = 10.0f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 11.5f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.26f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 80.0f, + fitnessClubMonthlyFeeForOneAdult = 6.0f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 1.12f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 70.0f, + internationalPrimarySchoolYearlyForOneChild = 15166.67f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 55.5f, + oneSummerDressInAChainStoreZaraHAndM = 44.33f, + onePairOfNikeRunningShoesMidRange = 79.17f, + onePairOfMenLeatherBusinessShoes = 78.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 0.5f, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 1.0f, + taxi1kmNormalTariff = 0.5f, + taxi1hourWaitingNormalTariff = 15.0f, + gasolineOneLiter = 1.14f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 80000.0f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 81500.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 200f + ), + averageMonthlyNetSalaryAfterTax = 25.0f, + dataQuality = true + ), CityEntity( + cityName = "Hallstatt", + country = "Cuba", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 10.0f, + mealFor2PeopleMidRangeRestaurant = 30.0f, + mealAtMcDonaldSOrEquivalent = 5.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 1.91f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.0f, + waterAThirdOfLiterBottleInRestaurants = 0.5f, + milkRegularOneLiter = 3.52f, + waterOneAndHalfLiterBottleAtTheMarket = 0.98f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 6.24f, + banana1kg = null, + oranges1kg = 1.12f, + tomato1kg = 1.0f, + potato1kg = 1.82f, + onion1kg = 2.0f, + lettuceOneHead = 0.86f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 1.0f, + riceWhite1kg = 1.0f, + eggsRegular12 = 1.64f, + localCheese1kg = 4.0f, + chickenFillets1kg = 6.07f, + beefRound1kgOrEquivalentBackLegRedMeat = 10.0f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 11.5f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.26f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 80.0f, + fitnessClubMonthlyFeeForOneAdult = 6.0f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 1.12f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 70.0f, + internationalPrimarySchoolYearlyForOneChild = 15166.67f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 55.5f, + oneSummerDressInAChainStoreZaraHAndM = 44.33f, + onePairOfNikeRunningShoesMidRange = 79.17f, + onePairOfMenLeatherBusinessShoes = 78.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 0.5f, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 1.0f, + taxi1kmNormalTariff = 0.5f, + taxi1hourWaitingNormalTariff = 15.0f, + gasolineOneLiter = 1.14f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 80000.0f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 81500.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 500f + ), + averageMonthlyNetSalaryAfterTax = 25.0f, + dataQuality = true + ), CityEntity( + cityName = "Simiane La Rotonde", + country = "Cuba", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 10.0f, + mealFor2PeopleMidRangeRestaurant = 30.0f, + mealAtMcDonaldSOrEquivalent = 5.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 1.91f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.0f, + waterAThirdOfLiterBottleInRestaurants = 0.5f, + milkRegularOneLiter = 3.52f, + waterOneAndHalfLiterBottleAtTheMarket = 0.98f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 6.24f, + banana1kg = null, + oranges1kg = 1.12f, + tomato1kg = 1.0f, + potato1kg = 1.82f, + onion1kg = 2.0f, + lettuceOneHead = 0.86f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 1.0f, + riceWhite1kg = 1.0f, + eggsRegular12 = 1.64f, + localCheese1kg = 4.0f, + chickenFillets1kg = 6.07f, + beefRound1kgOrEquivalentBackLegRedMeat = 10.0f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 11.5f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.26f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 80.0f, + fitnessClubMonthlyFeeForOneAdult = 6.0f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 1.12f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 70.0f, + internationalPrimarySchoolYearlyForOneChild = 15166.67f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 55.5f, + oneSummerDressInAChainStoreZaraHAndM = 44.33f, + onePairOfNikeRunningShoesMidRange = 79.17f, + onePairOfMenLeatherBusinessShoes = 78.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 0.5f, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 1.0f, + taxi1kmNormalTariff = 0.5f, + taxi1hourWaitingNormalTariff = 15.0f, + gasolineOneLiter = 1.14f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 80000.0f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 81500.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 800f + ), + averageMonthlyNetSalaryAfterTax = 25.0f, + dataQuality = true + ), CityEntity( + cityName = "Cinque Terre", + country = "Cuba", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 10.0f, + mealFor2PeopleMidRangeRestaurant = 30.0f, + mealAtMcDonaldSOrEquivalent = 5.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 1.91f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.0f, + waterAThirdOfLiterBottleInRestaurants = 0.5f, + milkRegularOneLiter = 3.52f, + waterOneAndHalfLiterBottleAtTheMarket = 0.98f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 6.24f, + banana1kg = null, + oranges1kg = 1.12f, + tomato1kg = 1.0f, + potato1kg = 1.82f, + onion1kg = 2.0f, + lettuceOneHead = 0.86f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 1.0f, + riceWhite1kg = 1.0f, + eggsRegular12 = 1.64f, + localCheese1kg = 4.0f, + chickenFillets1kg = 6.07f, + beefRound1kgOrEquivalentBackLegRedMeat = 10.0f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 11.5f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.26f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 80.0f, + fitnessClubMonthlyFeeForOneAdult = 6.0f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 1.12f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 70.0f, + internationalPrimarySchoolYearlyForOneChild = 15166.67f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 55.5f, + oneSummerDressInAChainStoreZaraHAndM = 44.33f, + onePairOfNikeRunningShoesMidRange = 79.17f, + onePairOfMenLeatherBusinessShoes = 78.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 0.5f, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 1.0f, + taxi1kmNormalTariff = 0.5f, + taxi1hourWaitingNormalTariff = 15.0f, + gasolineOneLiter = 1.14f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 80000.0f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 81500.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 900f + ), + averageMonthlyNetSalaryAfterTax = 25.0f, + dataQuality = true + ), CityEntity( + cityName = "Ortahisar", + country = "Cuba", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 10.0f, + mealFor2PeopleMidRangeRestaurant = 30.0f, + mealAtMcDonaldSOrEquivalent = 5.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 1.91f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.0f, + waterAThirdOfLiterBottleInRestaurants = 0.5f, + milkRegularOneLiter = 3.52f, + waterOneAndHalfLiterBottleAtTheMarket = 0.98f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 6.24f, + banana1kg = null, + oranges1kg = 1.12f, + tomato1kg = 1.0f, + potato1kg = 1.82f, + onion1kg = 2.0f, + lettuceOneHead = 0.86f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 1.0f, + riceWhite1kg = 1.0f, + eggsRegular12 = 1.64f, + localCheese1kg = 4.0f, + chickenFillets1kg = 6.07f, + beefRound1kgOrEquivalentBackLegRedMeat = 10.0f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 11.5f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.26f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 80.0f, + fitnessClubMonthlyFeeForOneAdult = 6.0f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 1.12f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 70.0f, + internationalPrimarySchoolYearlyForOneChild = 15166.67f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 55.5f, + oneSummerDressInAChainStoreZaraHAndM = 44.33f, + onePairOfNikeRunningShoesMidRange = 79.17f, + onePairOfMenLeatherBusinessShoes = 78.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 0.5f, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 1.0f, + taxi1kmNormalTariff = 0.5f, + taxi1hourWaitingNormalTariff = 15.0f, + gasolineOneLiter = 1.14f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 80000.0f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 81500.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 1000f + ), + averageMonthlyNetSalaryAfterTax = 25.0f, + dataQuality = true + ), CityEntity( + cityName = "Oia", + country = "Cuba", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 10.0f, + mealFor2PeopleMidRangeRestaurant = 30.0f, + mealAtMcDonaldSOrEquivalent = 5.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 1.91f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.0f, + waterAThirdOfLiterBottleInRestaurants = 0.5f, + milkRegularOneLiter = 3.52f, + waterOneAndHalfLiterBottleAtTheMarket = 0.98f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 6.24f, + banana1kg = null, + oranges1kg = 1.12f, + tomato1kg = 1.0f, + potato1kg = 1.82f, + onion1kg = 2.0f, + lettuceOneHead = 0.86f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 1.0f, + riceWhite1kg = 1.0f, + eggsRegular12 = 1.64f, + localCheese1kg = 4.0f, + chickenFillets1kg = 6.07f, + beefRound1kgOrEquivalentBackLegRedMeat = 10.0f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 11.5f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.26f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 80.0f, + fitnessClubMonthlyFeeForOneAdult = 6.0f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 1.12f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 70.0f, + internationalPrimarySchoolYearlyForOneChild = 15166.67f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 55.5f, + oneSummerDressInAChainStoreZaraHAndM = 44.33f, + onePairOfNikeRunningShoesMidRange = 79.17f, + onePairOfMenLeatherBusinessShoes = 78.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 0.5f, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 1.0f, + taxi1kmNormalTariff = 0.5f, + taxi1hourWaitingNormalTariff = 15.0f, + gasolineOneLiter = 1.14f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 80000.0f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 81500.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 1200f + ), + averageMonthlyNetSalaryAfterTax = 25.0f, + dataQuality = true + ), CityEntity( + cityName = "Shirakawa-go", + country = "Cuba", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 10.0f, + mealFor2PeopleMidRangeRestaurant = 30.0f, + mealAtMcDonaldSOrEquivalent = 5.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 1.91f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.0f, + waterAThirdOfLiterBottleInRestaurants = 0.5f, + milkRegularOneLiter = 3.52f, + waterOneAndHalfLiterBottleAtTheMarket = 0.98f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 6.24f, + banana1kg = null, + oranges1kg = 1.12f, + tomato1kg = 1.0f, + potato1kg = 1.82f, + onion1kg = 2.0f, + lettuceOneHead = 0.86f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 1.0f, + riceWhite1kg = 1.0f, + eggsRegular12 = 1.64f, + localCheese1kg = 4.0f, + chickenFillets1kg = 6.07f, + beefRound1kgOrEquivalentBackLegRedMeat = 10.0f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 11.5f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.26f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 80.0f, + fitnessClubMonthlyFeeForOneAdult = 6.0f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 1.12f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 70.0f, + internationalPrimarySchoolYearlyForOneChild = 15166.67f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 55.5f, + oneSummerDressInAChainStoreZaraHAndM = 44.33f, + onePairOfNikeRunningShoesMidRange = 79.17f, + onePairOfMenLeatherBusinessShoes = 78.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 0.5f, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 1.0f, + taxi1kmNormalTariff = 0.5f, + taxi1hourWaitingNormalTariff = 15.0f, + gasolineOneLiter = 1.14f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 80000.0f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 81500.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 1500f + ), + averageMonthlyNetSalaryAfterTax = 25.0f, + dataQuality = true + ), CityEntity( + cityName = "Ait Ben-Haddou", + country = "Cuba", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 10.0f, + mealFor2PeopleMidRangeRestaurant = 30.0f, + mealAtMcDonaldSOrEquivalent = 5.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 1.91f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.0f, + waterAThirdOfLiterBottleInRestaurants = 0.5f, + milkRegularOneLiter = 3.52f, + waterOneAndHalfLiterBottleAtTheMarket = 0.98f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 6.24f, + banana1kg = null, + oranges1kg = 1.12f, + tomato1kg = 1.0f, + potato1kg = 1.82f, + onion1kg = 2.0f, + lettuceOneHead = 0.86f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 1.0f, + riceWhite1kg = 1.0f, + eggsRegular12 = 1.64f, + localCheese1kg = 4.0f, + chickenFillets1kg = 6.07f, + beefRound1kgOrEquivalentBackLegRedMeat = 10.0f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 11.5f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.26f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 80.0f, + fitnessClubMonthlyFeeForOneAdult = 6.0f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 1.12f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 70.0f, + internationalPrimarySchoolYearlyForOneChild = 15166.67f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 55.5f, + oneSummerDressInAChainStoreZaraHAndM = 44.33f, + onePairOfNikeRunningShoesMidRange = 79.17f, + onePairOfMenLeatherBusinessShoes = 78.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 0.5f, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 1.0f, + taxi1kmNormalTariff = 0.5f, + taxi1hourWaitingNormalTariff = 15.0f, + gasolineOneLiter = 1.14f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 80000.0f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 81500.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 1700f + ), + averageMonthlyNetSalaryAfterTax = 25.0f, + dataQuality = true + ), CityEntity( + cityName = "Cua Van", + country = "Cuba", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 10.0f, + mealFor2PeopleMidRangeRestaurant = 30.0f, + mealAtMcDonaldSOrEquivalent = 5.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 1.91f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.0f, + waterAThirdOfLiterBottleInRestaurants = 0.5f, + milkRegularOneLiter = 3.52f, + waterOneAndHalfLiterBottleAtTheMarket = 0.98f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 6.24f, + banana1kg = null, + oranges1kg = 1.12f, + tomato1kg = 1.0f, + potato1kg = 1.82f, + onion1kg = 2.0f, + lettuceOneHead = 0.86f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 1.0f, + riceWhite1kg = 1.0f, + eggsRegular12 = 1.64f, + localCheese1kg = 4.0f, + chickenFillets1kg = 6.07f, + beefRound1kgOrEquivalentBackLegRedMeat = 10.0f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 11.5f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.26f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 80.0f, + fitnessClubMonthlyFeeForOneAdult = 6.0f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 1.12f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 70.0f, + internationalPrimarySchoolYearlyForOneChild = 15166.67f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 55.5f, + oneSummerDressInAChainStoreZaraHAndM = 44.33f, + onePairOfNikeRunningShoesMidRange = 79.17f, + onePairOfMenLeatherBusinessShoes = 78.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 0.5f, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 1.0f, + taxi1kmNormalTariff = 0.5f, + taxi1hourWaitingNormalTariff = 15.0f, + gasolineOneLiter = 1.14f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 80000.0f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 81500.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 2000f + ), + averageMonthlyNetSalaryAfterTax = 25.0f, + dataQuality = true + ), CityEntity( + cityName = "Alberobello", + country = "Cuba", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 10.0f, + mealFor2PeopleMidRangeRestaurant = 30.0f, + mealAtMcDonaldSOrEquivalent = 5.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 1.91f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.0f, + waterAThirdOfLiterBottleInRestaurants = 0.5f, + milkRegularOneLiter = 3.52f, + waterOneAndHalfLiterBottleAtTheMarket = 0.98f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 6.24f, + banana1kg = null, + oranges1kg = 1.12f, + tomato1kg = 1.0f, + potato1kg = 1.82f, + onion1kg = 2.0f, + lettuceOneHead = 0.86f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 1.0f, + riceWhite1kg = 1.0f, + eggsRegular12 = 1.64f, + localCheese1kg = 4.0f, + chickenFillets1kg = 6.07f, + beefRound1kgOrEquivalentBackLegRedMeat = 10.0f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 11.5f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.26f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 80.0f, + fitnessClubMonthlyFeeForOneAdult = 6.0f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 1.12f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 70.0f, + internationalPrimarySchoolYearlyForOneChild = 15166.67f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 55.5f, + oneSummerDressInAChainStoreZaraHAndM = 44.33f, + onePairOfNikeRunningShoesMidRange = 79.17f, + onePairOfMenLeatherBusinessShoes = 78.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 0.5f, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 1.0f, + taxi1kmNormalTariff = 0.5f, + taxi1hourWaitingNormalTariff = 15.0f, + gasolineOneLiter = 1.14f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 80000.0f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 81500.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 2500f + ), + averageMonthlyNetSalaryAfterTax = 25.0f, + dataQuality = true + ), CityEntity( + cityName = "Júzcar", + country = "Cuba", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 10.0f, + mealFor2PeopleMidRangeRestaurant = 30.0f, + mealAtMcDonaldSOrEquivalent = 5.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 1.91f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.0f, + waterAThirdOfLiterBottleInRestaurants = 0.5f, + milkRegularOneLiter = 3.52f, + waterOneAndHalfLiterBottleAtTheMarket = 0.98f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 6.24f, + banana1kg = null, + oranges1kg = 1.12f, + tomato1kg = 1.0f, + potato1kg = 1.82f, + onion1kg = 2.0f, + lettuceOneHead = 0.86f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 1.0f, + riceWhite1kg = 1.0f, + eggsRegular12 = 1.64f, + localCheese1kg = 4.0f, + chickenFillets1kg = 6.07f, + beefRound1kgOrEquivalentBackLegRedMeat = 10.0f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 11.5f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.26f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 80.0f, + fitnessClubMonthlyFeeForOneAdult = 6.0f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 1.12f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 70.0f, + internationalPrimarySchoolYearlyForOneChild = 15166.67f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 55.5f, + oneSummerDressInAChainStoreZaraHAndM = 44.33f, + onePairOfNikeRunningShoesMidRange = 79.17f, + onePairOfMenLeatherBusinessShoes = 78.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 0.5f, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 1.0f, + taxi1kmNormalTariff = 0.5f, + taxi1hourWaitingNormalTariff = 15.0f, + gasolineOneLiter = 1.14f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 80000.0f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 81500.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 2700f + ), + averageMonthlyNetSalaryAfterTax = 25.0f, + dataQuality = true + ), CityEntity( + cityName = "Reine", + country = "Cuba", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 10.0f, + mealFor2PeopleMidRangeRestaurant = 30.0f, + mealAtMcDonaldSOrEquivalent = 5.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 1.91f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.0f, + waterAThirdOfLiterBottleInRestaurants = 0.5f, + milkRegularOneLiter = 3.52f, + waterOneAndHalfLiterBottleAtTheMarket = 0.98f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 6.24f, + banana1kg = null, + oranges1kg = 1.12f, + tomato1kg = 1.0f, + potato1kg = 1.82f, + onion1kg = 2.0f, + lettuceOneHead = 0.86f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 1.0f, + riceWhite1kg = 1.0f, + eggsRegular12 = 1.64f, + localCheese1kg = 4.0f, + chickenFillets1kg = 6.07f, + beefRound1kgOrEquivalentBackLegRedMeat = 10.0f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 11.5f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.26f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 80.0f, + fitnessClubMonthlyFeeForOneAdult = 6.0f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 1.12f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 70.0f, + internationalPrimarySchoolYearlyForOneChild = 15166.67f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 55.5f, + oneSummerDressInAChainStoreZaraHAndM = 44.33f, + onePairOfNikeRunningShoesMidRange = 79.17f, + onePairOfMenLeatherBusinessShoes = 78.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 0.5f, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 1.0f, + taxi1kmNormalTariff = 0.5f, + taxi1hourWaitingNormalTariff = 15.0f, + gasolineOneLiter = 1.14f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 80000.0f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 81500.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 5000f + ), + averageMonthlyNetSalaryAfterTax = 25.0f, + dataQuality = true + ) + ) + + } +} + + + + + + + + diff --git a/src/test/kotlin/data/CheapestInternetFakeData.kt b/src/test/kotlin/data/CheapestInternetFakeData.kt new file mode 100644 index 000000000..21949199d --- /dev/null +++ b/src/test/kotlin/data/CheapestInternetFakeData.kt @@ -0,0 +1,816 @@ +package data + +import interactor.CostOfLivingDataSource +import model.* + + +object CheapestInternetFakeData { + private val validData by lazy{ + listOf( + CityEntity( + cityName = "Santiago de Cuba", + country = "Cuba", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 6.5f, + mealFor2PeopleMidRangeRestaurant = 15.0f, + mealAtMcDonaldSOrEquivalent = 5.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 2.0f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.0f, + waterAThirdOfLiterBottleInRestaurants = 1.0f, + milkRegularOneLiter = 3.8f, + waterOneAndHalfLiterBottleAtTheMarket = 2.0f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 11.02f, + banana1kg = 0.44f, + oranges1kg = 1.1f, + tomato1kg = 0.88f, + potato1kg = 1.1f, + onion1kg = 2.2f, + lettuceOneHead = 0.25f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 1.1f, + riceWhite1kg = 1.1f, + eggsRegular12 = 2.03f, + localCheese1kg = 9.0f, + chickenFillets1kg = 6.61f, + beefRound1kgOrEquivalentBackLegRedMeat = 6.61f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = null, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.1f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = null, + fitnessClubMonthlyFeeForOneAdult = null, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 1.0f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = null, + internationalPrimarySchoolYearlyForOneChild = null + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 40.0f, + oneSummerDressInAChainStoreZaraHAndM = 40.0f, + onePairOfNikeRunningShoesMidRange = 60.0f, + onePairOfMenLeatherBusinessShoes = 50.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = null, + taxi1kmNormalTariff = 0.7f, + taxi1hourWaitingNormalTariff = null, + gasolineOneLiter = null + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = null, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = null + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = 600.0f, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = null, + dataQuality = false + ), + CityEntity( + cityName = "Sancti Spiritus", + country = "Cuba", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 7.0f, + mealFor2PeopleMidRangeRestaurant = 25.0f, + mealAtMcDonaldSOrEquivalent = 5.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = null, + cokePepsiAThirdOfLiterBottleInRestaurants = 1.0f, + waterAThirdOfLiterBottleInRestaurants = 0.75f, + milkRegularOneLiter = null, + waterOneAndHalfLiterBottleAtTheMarket = 1.0f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 3.0f, + banana1kg = 0.5f, + oranges1kg = 0.5f, + tomato1kg = 1.0f, + potato1kg = 2.0f, + onion1kg = 2.0f, + lettuceOneHead = null + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = null, + riceWhite1kg = 1.0f, + eggsRegular12 = 2.4f, + localCheese1kg = 4.0f, + chickenFillets1kg = 5.0f, + beefRound1kgOrEquivalentBackLegRedMeat = 10.0f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 30.0f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = null, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 15.0f, + fitnessClubMonthlyFeeForOneAdult = null, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = null, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = null, + internationalPrimarySchoolYearlyForOneChild = null + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 25.0f, + oneSummerDressInAChainStoreZaraHAndM = 15.0f, + onePairOfNikeRunningShoesMidRange = 40.0f, + onePairOfMenLeatherBusinessShoes = 30.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 1.0f, + taxi1kmNormalTariff = 1.0f, + taxi1hourWaitingNormalTariff = null, + gasolineOneLiter = 2.0f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 50000.0f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 70000.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = 20.0f, + dataQuality = false + ), + CityEntity( + cityName = "Santa Clara", + country = "Cuba", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 10.0f, + mealFor2PeopleMidRangeRestaurant = 30.0f, + mealAtMcDonaldSOrEquivalent = 5.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 1.91f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.0f, + waterAThirdOfLiterBottleInRestaurants = 0.5f, + milkRegularOneLiter = 3.52f, + waterOneAndHalfLiterBottleAtTheMarket = 0.98f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 6.24f, + banana1kg = null, + oranges1kg = 1.12f, + tomato1kg = 1.0f, + potato1kg = 1.82f, + onion1kg = 2.0f, + lettuceOneHead = 0.86f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 1.0f, + riceWhite1kg = 1.0f, + eggsRegular12 = 1.64f, + localCheese1kg = 4.0f, + chickenFillets1kg = 6.07f, + beefRound1kgOrEquivalentBackLegRedMeat = 10.0f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 11.5f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.26f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 80.0f, + fitnessClubMonthlyFeeForOneAdult = 6.0f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 1.12f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 70.0f, + internationalPrimarySchoolYearlyForOneChild = 15166.67f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 55.5f, + oneSummerDressInAChainStoreZaraHAndM = 44.33f, + onePairOfNikeRunningShoesMidRange = 79.17f, + onePairOfMenLeatherBusinessShoes = 78.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 0.5f, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 1.0f, + taxi1kmNormalTariff = 0.5f, + taxi1hourWaitingNormalTariff = 15.0f, + gasolineOneLiter = 1.14f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 80000.0f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 81500.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = 120.0f, + dataQuality = false + ), + CityEntity( + cityName = "Damanhur", + country = "Egypt", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 3.05f, + mealFor2PeopleMidRangeRestaurant = 23.4f, + mealAtMcDonaldSOrEquivalent = 4.07f, + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 1.19f, + cokePepsiAThirdOfLiterBottleInRestaurants = 0.35f, + waterAThirdOfLiterBottleInRestaurants = 0.2f, + milkRegularOneLiter = 0.51f, + waterOneAndHalfLiterBottleAtTheMarket = 0.27f, + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 0.79f, + banana1kg = 0.61f, + oranges1kg = 0.41f, + tomato1kg = 0.24f, + potato1kg = 0.27f, + onion1kg = 0.18f, + lettuceOneHead = 0.09f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 0.54f, + riceWhite1kg = 0.52f, + eggsRegular12 = 0.98f, + localCheese1kg = 1.42f, + chickenFillets1kg = 2.92f, + beefRound1kgOrEquivalentBackLegRedMeat = 7.33f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 47.48f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.02f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 12.21f, + fitnessClubMonthlyFeeForOneAdult = 16.28f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 3.26f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 40.7f, + internationalPrimarySchoolYearlyForOneChild = 915.7f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 12.21f, + oneSummerDressInAChainStoreZaraHAndM = 10.17f, + onePairOfNikeRunningShoesMidRange = 122.09f, + onePairOfMenLeatherBusinessShoes = 24.42f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 0.08f, + monthlyPassRegularPrice = 8.14f, + taxiStartNormalTariff = 0.35f, + taxi1kmNormalTariff = 0.16f, + taxi1hourWaitingNormalTariff = 1.63f, + gasolineOneLiter = 0.36f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 15261.71f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 17296.61f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = 1017.45f, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 203.49f + ), + averageMonthlyNetSalaryAfterTax = 81.4f, + dataQuality = true + ), + CityEntity( + cityName = "cairo", + country = "Egypt", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 5.05f, + mealFor2PeopleMidRangeRestaurant = 23.4f, + mealAtMcDonaldSOrEquivalent = 6.07f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 7.19f, + cokePepsiAThirdOfLiterBottleInRestaurants = 8.35f, + waterAThirdOfLiterBottleInRestaurants = 0.2f, + milkRegularOneLiter = 0.51f, + waterOneAndHalfLiterBottleAtTheMarket = 0.27f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 0.79f, + banana1kg = 0.61f, + oranges1kg = 0.41f, + tomato1kg = 0.24f, + potato1kg = 0.27f, + onion1kg = 0.18f, + lettuceOneHead = 0.09f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 0.54f, + riceWhite1kg = 0.52f, + eggsRegular12 = 0.98f, + localCheese1kg = 1.42f, + chickenFillets1kg = 2.92f, + beefRound1kgOrEquivalentBackLegRedMeat = 7.33f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 47.48f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.02f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 52.21f, + fitnessClubMonthlyFeeForOneAdult = 16.28f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 3.26f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 40.7f, + internationalPrimarySchoolYearlyForOneChild = 915.7f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 12.21f, + oneSummerDressInAChainStoreZaraHAndM = 10.17f, + onePairOfNikeRunningShoesMidRange = 122.09f, + onePairOfMenLeatherBusinessShoes = 24.42f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 0.08f, + monthlyPassRegularPrice = 8.14f, + taxiStartNormalTariff = 0.35f, + taxi1kmNormalTariff = 0.16f, + taxi1hourWaitingNormalTariff = 1.63f, + gasolineOneLiter = 0.36f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 15261.71f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 17296.61f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = 1017.45f, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 203.49f + ), + averageMonthlyNetSalaryAfterTax = 81.4f, + dataQuality = true + ), + CityEntity( + cityName = "Dushanbe", + country = "Tajikistan", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 3.97f, + mealFor2PeopleMidRangeRestaurant = 11.0f, + mealAtMcDonaldSOrEquivalent = 4.96f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 1.2f, + cokePepsiAThirdOfLiterBottleInRestaurants = 0.41f, + waterAThirdOfLiterBottleInRestaurants = 0.28f, + milkRegularOneLiter = 0.72f, + waterOneAndHalfLiterBottleAtTheMarket = 0.43f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 1.15f, + banana1kg = 2.24f, + oranges1kg = 2.3f, + tomato1kg = 1.19f, + potato1kg = 0.44f, + onion1kg = 0.31f, + lettuceOneHead = 0.42f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 0.41f, + riceWhite1kg = 1.58f, + eggsRegular12 = 1.56f, + localCheese1kg = 5.77f, + chickenFillets1kg = 3.9f, + beefRound1kgOrEquivalentBackLegRedMeat = 6.84f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 31.26f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.02f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 22.17f, + fitnessClubMonthlyFeeForOneAdult = 34.86f, + tennisCourtRentOneHourOnWeekend = 11.17f, + cinemaInternationalReleaseOneSeat = 5.21f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 84.39f, + internationalPrimarySchoolYearlyForOneChild = 4964.41f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 32.26f, + oneSummerDressInAChainStoreZaraHAndM = 24.07f, + onePairOfNikeRunningShoesMidRange = 53.36f, + onePairOfMenLeatherBusinessShoes = 52.12f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 0.25f, + monthlyPassRegularPrice = 6.95f, + taxiStartNormalTariff = 0.99f, + taxi1kmNormalTariff = 0.3f, + taxi1hourWaitingNormalTariff = 2.38f, + gasolineOneLiter = 0.94f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 14392.29f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 21839.84f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = 376.03f, + apartmentOneBedroomOutsideOfCentre = 186.15f, + apartment3BedroomsInCityCentre = 631.14f, + apartment3BedroomsOutsideOfCentre = 330.47f, + pricePerSquareMeterToBuyApartmentInCityCentre = 835.59f, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 381.24f + ), + averageMonthlyNetSalaryAfterTax = 163.81f, + dataQuality = true + ), + CityEntity( + cityName = "Vila Real de Santo Antonio", + country = "Portugal", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 10.54f, + mealFor2PeopleMidRangeRestaurant = 52.69f, + mealAtMcDonaldSOrEquivalent = 7.11f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 1.3f, + cokePepsiAThirdOfLiterBottleInRestaurants = 1.48f, + waterAThirdOfLiterBottleInRestaurants = 1.06f, + milkRegularOneLiter = 0.79f, + waterOneAndHalfLiterBottleAtTheMarket = 0.53f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 1.44f, + banana1kg = 1.07f, + oranges1kg = 1.36f, + tomato1kg = 1.92f, + potato1kg = 1.05f, + onion1kg = 0.93f, + lettuceOneHead = 0.95f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 1.35f, + riceWhite1kg = 1.1f, + eggsRegular12 = 1.93f, + localCheese1kg = 11.24f, + chickenFillets1kg = 6.4f, + beefRound1kgOrEquivalentBackLegRedMeat = 10.89f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 106.81f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.04f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 33.72f, + fitnessClubMonthlyFeeForOneAdult = null, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 7.17f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 189.67f, + internationalPrimarySchoolYearlyForOneChild = 6322.47f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 72.71f, + oneSummerDressInAChainStoreZaraHAndM = 15.81f, + onePairOfNikeRunningShoesMidRange = 74.93f, + onePairOfMenLeatherBusinessShoes = 47.42f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 0.95f, + monthlyPassRegularPrice = 24.24f, + taxiStartNormalTariff = 3.42f, + taxi1kmNormalTariff = 0.47f, + taxi1hourWaitingNormalTariff = 15.81f, + gasolineOneLiter = 2.02f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 28977.99f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 27397.38f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = 2634.36f, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 843.0f + ), + averageMonthlyNetSalaryAfterTax = null, + dataQuality = false + ), + CityEntity( + cityName = "Samarkand", + country = "Uzbekistan", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 5.0f, + mealFor2PeopleMidRangeRestaurant = 19.44f, + mealAtMcDonaldSOrEquivalent = 3.5f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 1.55f, + cokePepsiAThirdOfLiterBottleInRestaurants = 0.6f, + waterAThirdOfLiterBottleInRestaurants = 0.29f, + milkRegularOneLiter = 0.99f, + waterOneAndHalfLiterBottleAtTheMarket = 0.3f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 1.42f, + banana1kg = 1.71f, + oranges1kg = 2.28f, + tomato1kg = 1.48f, + potato1kg = 0.48f, + onion1kg = 0.36f, + lettuceOneHead = 0.3f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 0.27f, + riceWhite1kg = 1.2f, + eggsRegular12 = 1.49f, + localCheese1kg = 6.08f, + chickenFillets1kg = 3.64f, + beefRound1kgOrEquivalentBackLegRedMeat = 7.26f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 32.5f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.02f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 15.0f, + fitnessClubMonthlyFeeForOneAdult = 36.67f, + tennisCourtRentOneHourOnWeekend = 11.0f, + cinemaInternationalReleaseOneSeat = 1.5f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 200.0f, + internationalPrimarySchoolYearlyForOneChild = 5622.48f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 25.0f, + oneSummerDressInAChainStoreZaraHAndM = 50.0f, + onePairOfNikeRunningShoesMidRange = 80.0f, + onePairOfMenLeatherBusinessShoes = 99.12f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 0.15f, + monthlyPassRegularPrice = 10.0f, + taxiStartNormalTariff = 0.5f, + taxi1kmNormalTariff = 0.27f, + taxi1hourWaitingNormalTariff = 3.0f, + gasolineOneLiter = 0.91f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 13508.25f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 19690.73f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = 275.0f, + apartmentOneBedroomOutsideOfCentre = 206.67f, + apartment3BedroomsInCityCentre = 500.0f, + apartment3BedroomsOutsideOfCentre = 383.33f, + pricePerSquareMeterToBuyApartmentInCityCentre = 730.67f, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 482.64f + ), + averageMonthlyNetSalaryAfterTax = 253.33f, + dataQuality = false + ), CityEntity( + cityName = "Malabo", + country = "Equatorial Guinea", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 12.85f, + mealFor2PeopleMidRangeRestaurant = 40.16f, + mealAtMcDonaldSOrEquivalent = 20.08f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 6.43f, + cokePepsiAThirdOfLiterBottleInRestaurants = 1.07f, + waterAThirdOfLiterBottleInRestaurants = 1.2f, + milkRegularOneLiter = 2.25f, + waterOneAndHalfLiterBottleAtTheMarket = 0.91f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 5.62f, + banana1kg = 2.81f, + oranges1kg = 4.02f, + tomato1kg = 2.81f, + potato1kg = 4.26f, + onion1kg = 4.02f, + lettuceOneHead = 0.91f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 3.2f, + riceWhite1kg = 1.61f, + eggsRegular12 = 1.93f, + localCheese1kg = null, + chickenFillets1kg = 4.82f, + beefRound1kgOrEquivalentBackLegRedMeat = 4.02f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 46.59f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.27f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 160.64f, + fitnessClubMonthlyFeeForOneAdult = 54.89f, + tennisCourtRentOneHourOnWeekend = 28.02f, + cinemaInternationalReleaseOneSeat = 7.26f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 68.27f, + internationalPrimarySchoolYearlyForOneChild = 1743.37f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 24.1f, + oneSummerDressInAChainStoreZaraHAndM = 77.64f, + onePairOfNikeRunningShoesMidRange = 240.96f, + onePairOfMenLeatherBusinessShoes = 72.29f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 1.61f, + monthlyPassRegularPrice = 44.3f, + taxiStartNormalTariff = 0.8f, + taxi1kmNormalTariff = 0.8f, + taxi1hourWaitingNormalTariff = 6.43f, + gasolineOneLiter = 0.78f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 22048.18f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 32218.45f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = 200.8f, + apartmentOneBedroomOutsideOfCentre = 112.45f, + apartment3BedroomsInCityCentre = 722.89f, + apartment3BedroomsOutsideOfCentre = 361.45f, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = 321.28f, + dataQuality = true + ), CityEntity( + cityName = "Dehra Dun", + country = "India", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 1.84f, + mealFor2PeopleMidRangeRestaurant = 18.42f, + mealAtMcDonaldSOrEquivalent = 5.22f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 1.41f, + cokePepsiAThirdOfLiterBottleInRestaurants = 0.37f, + waterAThirdOfLiterBottleInRestaurants = 0.19f, + milkRegularOneLiter = 0.71f, + waterOneAndHalfLiterBottleAtTheMarket = 0.37f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 1.45f, + banana1kg = 0.67f, + oranges1kg = 0.93f, + tomato1kg = 0.54f, + potato1kg = 0.32f, + onion1kg = 0.43f, + lettuceOneHead = 0.52f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 0.44f, + riceWhite1kg = 0.56f, + eggsRegular12 = 0.88f, + localCheese1kg = 4.38f, + chickenFillets1kg = 3.19f, + beefRound1kgOrEquivalentBackLegRedMeat = 3.93f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 58.34f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.01f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 8.75f, + fitnessClubMonthlyFeeForOneAdult = 17.69f, + tennisCourtRentOneHourOnWeekend = 11.05f, + cinemaInternationalReleaseOneSeat = 4.3f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 51.28f, + internationalPrimarySchoolYearlyForOneChild = 1321.52f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 28.66f, + oneSummerDressInAChainStoreZaraHAndM = 31.63f, + onePairOfNikeRunningShoesMidRange = 63.87f, + onePairOfMenLeatherBusinessShoes = 51.58f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 0.43f, + monthlyPassRegularPrice = 4.91f, + taxiStartNormalTariff = 0.61f, + taxi1kmNormalTariff = 0.2f, + taxi1hourWaitingNormalTariff = 1.84f, + gasolineOneLiter = 1.21f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = null, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 18422.64f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = 145.85f, + apartmentOneBedroomOutsideOfCentre = 74.92f, + apartment3BedroomsInCityCentre = 331.61f, + apartment3BedroomsOutsideOfCentre = 186.68f, + pricePerSquareMeterToBuyApartmentInCityCentre = 2897.58f, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 615.45f + ), + averageMonthlyNetSalaryAfterTax = 358.14f, + dataQuality = true + ) + ) + + } + private val _invalidData by lazy { + listOf( + CityEntity( + cityName = " ", + country = " ", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = null, + mealFor2PeopleMidRangeRestaurant = null, + mealAtMcDonaldSOrEquivalent = null + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = null, + cokePepsiAThirdOfLiterBottleInRestaurants = null, + waterAThirdOfLiterBottleInRestaurants = null, + milkRegularOneLiter = null, + waterOneAndHalfLiterBottleAtTheMarket = null + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = null, + banana1kg = null, + oranges1kg = null, + tomato1kg = null, + potato1kg = null, + onion1kg = null, + lettuceOneHead = null + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = null, + riceWhite1kg = null, + eggsRegular12 = null, + localCheese1kg = null, + chickenFillets1kg = null, + beefRound1kgOrEquivalentBackLegRedMeat = null + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = null, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = null, + internet60MbpsOrMoreUnlimitedDataCableAdsl = null, + fitnessClubMonthlyFeeForOneAdult = null, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = null, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = null, + internationalPrimarySchoolYearlyForOneChild = null + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = null, + oneSummerDressInAChainStoreZaraHAndM = null, + onePairOfNikeRunningShoesMidRange = null, + onePairOfMenLeatherBusinessShoes = null + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = null, + taxi1kmNormalTariff = null, + taxi1hourWaitingNormalTariff = null, + gasolineOneLiter = null + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = null, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 21105.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = null, + dataQuality = false + ) + ) + } + + val validSalaryAndInternetPrices by lazy { + object : CostOfLivingDataSource { + override fun getAllCitiesData() = validData + } + } + + val invalidData by lazy { + object : CostOfLivingDataSource { + override fun getAllCitiesData() = _invalidData + } + } + + val emptyData by lazy { + object : CostOfLivingDataSource { + override fun getAllCitiesData() = emptyList() + + } + } + +} diff --git a/src/test/kotlin/data/CitiesAverageSalaryFakeData.kt b/src/test/kotlin/data/CitiesAverageSalaryFakeData.kt new file mode 100644 index 000000000..95d531768 --- /dev/null +++ b/src/test/kotlin/data/CitiesAverageSalaryFakeData.kt @@ -0,0 +1,234 @@ +package data + +import interactor.CostOfLivingDataSource +import model.* + + +class CitiesAverageSalaryFakeData : CostOfLivingDataSource { + override fun getAllCitiesData(): List { + return listOf( + CityEntity( + cityName = "Santiago de Cuba", + country = "Cuba", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 6.5f, + mealFor2PeopleMidRangeRestaurant = 15.0f, + mealAtMcDonaldSOrEquivalent = 5.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 2.0f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.0f, + waterAThirdOfLiterBottleInRestaurants = 1.0f, + milkRegularOneLiter = 3.8f, + waterOneAndHalfLiterBottleAtTheMarket = 2.0f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 11.02f, + banana1kg = 0.44f, + oranges1kg = 1.1f, + tomato1kg = 0.88f, + potato1kg = 1.1f, + onion1kg = 2.2f, + lettuceOneHead = 0.25f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 1.1f, + riceWhite1kg = 1.1f, + eggsRegular12 = 2.03f, + localCheese1kg = 9.0f, + chickenFillets1kg = 6.61f, + beefRound1kgOrEquivalentBackLegRedMeat = 6.61f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = null, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.1f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = null, + fitnessClubMonthlyFeeForOneAdult = null, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 1.0f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = null, + internationalPrimarySchoolYearlyForOneChild = null + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 40.0f, + oneSummerDressInAChainStoreZaraHAndM = 40.0f, + onePairOfNikeRunningShoesMidRange = 60.0f, + onePairOfMenLeatherBusinessShoes = 50.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = null, + taxi1kmNormalTariff = 0.7f, + taxi1hourWaitingNormalTariff = null, + gasolineOneLiter = null + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = null, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = null + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = 600.0f, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = 18f, + dataQuality = false + ), + CityEntity( + cityName = "Sancti Spiritus", + country = "Cuba", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 7.0f, + mealFor2PeopleMidRangeRestaurant = 25.0f, + mealAtMcDonaldSOrEquivalent = 5.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = null, + cokePepsiAThirdOfLiterBottleInRestaurants = 1.0f, + waterAThirdOfLiterBottleInRestaurants = 0.75f, + milkRegularOneLiter = null, + waterOneAndHalfLiterBottleAtTheMarket = 1.0f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 3.0f, + banana1kg = 0.5f, + oranges1kg = 0.5f, + tomato1kg = 1.0f, + potato1kg = 2.0f, + onion1kg = 2.0f, + lettuceOneHead = null + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = null, + riceWhite1kg = 1.0f, + eggsRegular12 = 2.4f, + localCheese1kg = 4.0f, + chickenFillets1kg = 5.0f, + beefRound1kgOrEquivalentBackLegRedMeat = 10.0f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 30.0f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = null, + internet60MbpsOrMoreUnlimitedDataCableAdsl = null, + fitnessClubMonthlyFeeForOneAdult = null, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = null, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = null, + internationalPrimarySchoolYearlyForOneChild = null + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 25.0f, + oneSummerDressInAChainStoreZaraHAndM = 15.0f, + onePairOfNikeRunningShoesMidRange = 40.0f, + onePairOfMenLeatherBusinessShoes = 30.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 1.0f, + taxi1kmNormalTariff = 1.0f, + taxi1hourWaitingNormalTariff = null, + gasolineOneLiter = 2.0f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 50000.0f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 70000.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = 20.0f, + dataQuality = false + ), + CityEntity( + cityName = "Santa Clara", + country = "Cuba", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 10.0f, + mealFor2PeopleMidRangeRestaurant = 30.0f, + mealAtMcDonaldSOrEquivalent = 5.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 1.91f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.0f, + waterAThirdOfLiterBottleInRestaurants = 0.5f, + milkRegularOneLiter = 3.52f, + waterOneAndHalfLiterBottleAtTheMarket = 0.98f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 6.24f, + banana1kg = null, + oranges1kg = 1.12f, + tomato1kg = 1.0f, + potato1kg = 1.82f, + onion1kg = 2.0f, + lettuceOneHead = 0.86f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 1.0f, + riceWhite1kg = 1.0f, + eggsRegular12 = 1.64f, + localCheese1kg = 4.0f, + chickenFillets1kg = 6.07f, + beefRound1kgOrEquivalentBackLegRedMeat = 10.0f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 11.5f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.26f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 80.0f, + fitnessClubMonthlyFeeForOneAdult = 6.0f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 1.12f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 70.0f, + internationalPrimarySchoolYearlyForOneChild = 15166.67f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 55.5f, + oneSummerDressInAChainStoreZaraHAndM = 44.33f, + onePairOfNikeRunningShoesMidRange = 79.17f, + onePairOfMenLeatherBusinessShoes = 78.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 0.5f, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 1.0f, + taxi1kmNormalTariff = 0.5f, + taxi1hourWaitingNormalTariff = 15.0f, + gasolineOneLiter = 1.14f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 80000.0f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 81500.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = 25.0f, + dataQuality = true + ) + ) + + } +} + + + + + + + + diff --git a/src/test/kotlin/data/CostlierCityFakeData.kt b/src/test/kotlin/data/CostlierCityFakeData.kt new file mode 100644 index 000000000..7ead17feb --- /dev/null +++ b/src/test/kotlin/data/CostlierCityFakeData.kt @@ -0,0 +1,379 @@ +package data + +import interactor.CostOfLivingDataSource +import model.* + + +class CostlierCityFakeData : CostOfLivingDataSource { + override fun getAllCitiesData(): List { + return listOf( + CityEntity( + cityName = "Santiago de Cuba", + country = "Cuba", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 6.5f, + mealFor2PeopleMidRangeRestaurant = 15.0f, + mealAtMcDonaldSOrEquivalent = 5.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 2.0f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.0f, + waterAThirdOfLiterBottleInRestaurants = 1.0f, + milkRegularOneLiter = 3.8f, + waterOneAndHalfLiterBottleAtTheMarket = 2.0f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 11.02f, + banana1kg = 0.44f, + oranges1kg = 1.1f, + tomato1kg = 0.88f, + potato1kg = 1.1f, + onion1kg = 2.2f, + lettuceOneHead = 0.25f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 1.1f, + riceWhite1kg = 1.1f, + eggsRegular12 = 2.03f, + localCheese1kg = 9.0f, + chickenFillets1kg = 6.61f, + beefRound1kgOrEquivalentBackLegRedMeat = 6.61f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = null, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.1f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = null, + fitnessClubMonthlyFeeForOneAdult = null, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 1.0f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = null, + internationalPrimarySchoolYearlyForOneChild = null + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 40.0f, + oneSummerDressInAChainStoreZaraHAndM = 40.0f, + onePairOfNikeRunningShoesMidRange = 60.0f, + onePairOfMenLeatherBusinessShoes = 50.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = null, + taxi1kmNormalTariff = 0.7f, + taxi1hourWaitingNormalTariff = null, + gasolineOneLiter = null + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = null, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = null + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = 200.0f, + apartmentOneBedroomOutsideOfCentre = 100.0f, + apartment3BedroomsInCityCentre = 600.0f, + apartment3BedroomsOutsideOfCentre = 100f, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = 18f, + dataQuality = true + ), + CityEntity( + cityName = "Sancti Spiritus", + country = "Cuba", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 7.0f, + mealFor2PeopleMidRangeRestaurant = 25.0f, + mealAtMcDonaldSOrEquivalent = 5.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = null, + cokePepsiAThirdOfLiterBottleInRestaurants = 1.0f, + waterAThirdOfLiterBottleInRestaurants = 0.75f, + milkRegularOneLiter = null, + waterOneAndHalfLiterBottleAtTheMarket = 1.0f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 3.0f, + banana1kg = 0.5f, + oranges1kg = 0.5f, + tomato1kg = 1.0f, + potato1kg = 2.0f, + onion1kg = 2.0f, + lettuceOneHead = null + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = null, + riceWhite1kg = 1.0f, + eggsRegular12 = 2.4f, + localCheese1kg = 4.0f, + chickenFillets1kg = 5.0f, + beefRound1kgOrEquivalentBackLegRedMeat = 10.0f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 30.0f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = null, + internet60MbpsOrMoreUnlimitedDataCableAdsl = null, + fitnessClubMonthlyFeeForOneAdult = null, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = null, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = null, + internationalPrimarySchoolYearlyForOneChild = null + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 25.0f, + oneSummerDressInAChainStoreZaraHAndM = 15.0f, + onePairOfNikeRunningShoesMidRange = 40.0f, + onePairOfMenLeatherBusinessShoes = 30.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 1.0f, + taxi1kmNormalTariff = 1.0f, + taxi1hourWaitingNormalTariff = null, + gasolineOneLiter = 2.0f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 50000.0f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 70000.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = 300.0f, + apartmentOneBedroomOutsideOfCentre = 180.0f, + apartment3BedroomsInCityCentre = 800.0f, + apartment3BedroomsOutsideOfCentre = 550.0f, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = 20.0f, + dataQuality = true + ), + CityEntity( + cityName = "Santa Clara", + country = "Cuba", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 10.0f, + mealFor2PeopleMidRangeRestaurant = 30.0f, + mealAtMcDonaldSOrEquivalent = 5.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 1.91f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.0f, + waterAThirdOfLiterBottleInRestaurants = 0.5f, + milkRegularOneLiter = 3.52f, + waterOneAndHalfLiterBottleAtTheMarket = 0.98f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 6.24f, + banana1kg = null, + oranges1kg = 1.12f, + tomato1kg = 1.0f, + potato1kg = 1.82f, + onion1kg = 2.0f, + lettuceOneHead = 0.86f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 1.0f, + riceWhite1kg = 1.0f, + eggsRegular12 = 1.64f, + localCheese1kg = 4.0f, + chickenFillets1kg = 6.07f, + beefRound1kgOrEquivalentBackLegRedMeat = 10.0f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 11.5f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.26f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 80.0f, + fitnessClubMonthlyFeeForOneAdult = 6.0f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 1.12f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 70.0f, + internationalPrimarySchoolYearlyForOneChild = 15166.67f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 55.5f, + oneSummerDressInAChainStoreZaraHAndM = 44.33f, + onePairOfNikeRunningShoesMidRange = 79.17f, + onePairOfMenLeatherBusinessShoes = 78.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 0.5f, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 1.0f, + taxi1kmNormalTariff = 0.5f, + taxi1hourWaitingNormalTariff = 15.0f, + gasolineOneLiter = 1.14f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 80000.0f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 81500.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = 1000.0f, + apartmentOneBedroomOutsideOfCentre = 970.0f, + apartment3BedroomsInCityCentre = 2567.0f, + apartment3BedroomsOutsideOfCentre = 999.0f, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = 25.0f, + dataQuality = true + ), + CityEntity( + cityName = "Masin", + country = "Iraq", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 6.5f, + mealFor2PeopleMidRangeRestaurant = 15.0f, + mealAtMcDonaldSOrEquivalent = 5.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 2.0f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.0f, + waterAThirdOfLiterBottleInRestaurants = 1.0f, + milkRegularOneLiter = 3.8f, + waterOneAndHalfLiterBottleAtTheMarket = 2.0f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 11.02f, + banana1kg = 0.44f, + oranges1kg = 1.1f, + tomato1kg = 0.88f, + potato1kg = 1.1f, + onion1kg = 2.2f, + lettuceOneHead = 0.25f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 1.1f, + riceWhite1kg = 1.1f, + eggsRegular12 = 2.03f, + localCheese1kg = 9.0f, + chickenFillets1kg = 6.61f, + beefRound1kgOrEquivalentBackLegRedMeat = 6.61f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = null, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.1f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = null, + fitnessClubMonthlyFeeForOneAdult = null, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 1.0f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = null, + internationalPrimarySchoolYearlyForOneChild = null + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 40.0f, + oneSummerDressInAChainStoreZaraHAndM = 40.0f, + onePairOfNikeRunningShoesMidRange = 60.0f, + onePairOfMenLeatherBusinessShoes = 50.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = null, + taxi1kmNormalTariff = 0.7f, + taxi1hourWaitingNormalTariff = null, + gasolineOneLiter = null + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = null, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = null + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = 6000.0f, + apartmentOneBedroomOutsideOfCentre = 100.0f, + apartment3BedroomsInCityCentre = 600.0f, + apartment3BedroomsOutsideOfCentre = 100f, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = 18f, + dataQuality = false + ), + CityEntity( + cityName = "Seoul", + country = "Korean", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 6.5f, + mealFor2PeopleMidRangeRestaurant = 15.0f, + mealAtMcDonaldSOrEquivalent = 5.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 2.0f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.0f, + waterAThirdOfLiterBottleInRestaurants = 1.0f, + milkRegularOneLiter = 3.8f, + waterOneAndHalfLiterBottleAtTheMarket = 2.0f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 11.02f, + banana1kg = 0.44f, + oranges1kg = 1.1f, + tomato1kg = 0.88f, + potato1kg = 1.1f, + onion1kg = 2.2f, + lettuceOneHead = 0.25f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 1.1f, + riceWhite1kg = 1.1f, + eggsRegular12 = 2.03f, + localCheese1kg = 9.0f, + chickenFillets1kg = 6.61f, + beefRound1kgOrEquivalentBackLegRedMeat = 6.61f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = null, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.1f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = null, + fitnessClubMonthlyFeeForOneAdult = null, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 1.0f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = null, + internationalPrimarySchoolYearlyForOneChild = null + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 40.0f, + oneSummerDressInAChainStoreZaraHAndM = 40.0f, + onePairOfNikeRunningShoesMidRange = 60.0f, + onePairOfMenLeatherBusinessShoes = 50.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = null, + taxi1kmNormalTariff = 0.7f, + taxi1hourWaitingNormalTariff = null, + gasolineOneLiter = null + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = null, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = null + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = 678f, + apartmentOneBedroomOutsideOfCentre = 500f, + apartment3BedroomsInCityCentre = 7000.0f, + apartment3BedroomsOutsideOfCentre = 100f, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = 18f, + dataQuality = true + ), + ) + + } +} + +fun main() { + +} + + + + + + + diff --git a/src/test/kotlin/data/CountriesTaxesFakeData.kt b/src/test/kotlin/data/CountriesTaxesFakeData.kt new file mode 100644 index 000000000..2ef35eb5d --- /dev/null +++ b/src/test/kotlin/data/CountriesTaxesFakeData.kt @@ -0,0 +1,374 @@ +package data + +import interactor.CostOfLivingDataSource +import model.* + + +class CountriesTaxesFakeData : CostOfLivingDataSource { + override fun getAllCitiesData(): List { + return listOf( + CityEntity( + cityName = "Great Falls", + country = "United States", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 15.0f, + mealFor2PeopleMidRangeRestaurant = 40.0f, + mealAtMcDonaldSOrEquivalent = 9.5f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 4.5f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.02f, + waterAThirdOfLiterBottleInRestaurants = 1.71f, + milkRegularOneLiter = 1.02f, + waterOneAndHalfLiterBottleAtTheMarket = 1.86f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 4.41f, + banana1kg = 1.58f, + oranges1kg = 3.93f, + tomato1kg = 4.41f, + potato1kg = 1.65f, + onion1kg = 2.08f, + lettuceOneHead = 1.25f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 2.95f, + riceWhite1kg = 4.12f, + eggsRegular12 = 3.25f, + localCheese1kg = 9.92f, + chickenFillets1kg = 11.01f, + beefRound1kgOrEquivalentBackLegRedMeat = 13.23f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 145.61f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.15f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 65.83f, + fitnessClubMonthlyFeeForOneAdult = null, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 10.0f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 2500.0f, + internationalPrimarySchoolYearlyForOneChild = 75000.0f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 51.25f, + oneSummerDressInAChainStoreZaraHAndM = 27.5f, + onePairOfNikeRunningShoesMidRange = 70.0f, + onePairOfMenLeatherBusinessShoes = 120.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 1.5f, + monthlyPassRegularPrice = 55.0f, + taxiStartNormalTariff = 9.5f, + taxi1kmNormalTariff = 1.46f, + taxi1hourWaitingNormalTariff = 25.0f, + gasolineOneLiter = 1.44f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 31000.0f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 23000.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = 750.0f, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = 1600.0f, + apartment3BedroomsOutsideOfCentre = 2250.0f, + pricePerSquareMeterToBuyApartmentInCityCentre = 2583.34f, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 7965.29f + ), + averageMonthlyNetSalaryAfterTax = 1000.0f, + dataQuality = true + ), CityEntity( + cityName = "Roseburg", + country = "United States", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 15.0f, + mealFor2PeopleMidRangeRestaurant = 60.0f, + mealAtMcDonaldSOrEquivalent = 8.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 4.49f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.22f, + waterAThirdOfLiterBottleInRestaurants = 1.26f, + milkRegularOneLiter = 0.98f, + waterOneAndHalfLiterBottleAtTheMarket = 1.0f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 2.3f, + banana1kg = 0.99f, + oranges1kg = 2.2f, + tomato1kg = 1.1f, + potato1kg = 1.71f, + onion1kg = 1.62f, + lettuceOneHead = 1.83f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 3.04f, + riceWhite1kg = 2.2f, + eggsRegular12 = 1.69f, + localCheese1kg = 12.9f, + chickenFillets1kg = 16.17f, + beefRound1kgOrEquivalentBackLegRedMeat = 12.49f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 100.0f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.25f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 55.0f, + fitnessClubMonthlyFeeForOneAdult = 50.0f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 12.5f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 921.42f, + internationalPrimarySchoolYearlyForOneChild = 8950.0f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 41.67f, + oneSummerDressInAChainStoreZaraHAndM = 25.0f, + onePairOfNikeRunningShoesMidRange = 63.33f, + onePairOfMenLeatherBusinessShoes = 50.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 2.0f, + monthlyPassRegularPrice = 20.0f, + taxiStartNormalTariff = 3.0f, + taxi1kmNormalTariff = 1.86f, + taxi1hourWaitingNormalTariff = 15.0f, + gasolineOneLiter = 1.36f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 20000.0f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 22328.2f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = 1300.0f, + apartmentOneBedroomOutsideOfCentre = 1475.0f, + apartment3BedroomsInCityCentre = 2350.0f, + apartment3BedroomsOutsideOfCentre = 2625.0f, + pricePerSquareMeterToBuyApartmentInCityCentre = 1883.68f, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 1614.59f + ), + averageMonthlyNetSalaryAfterTax = 1200.0f, + dataQuality = true + ), + CityEntity( + cityName = "Moose Jaw", + country = "Canada", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 14.82f, + mealFor2PeopleMidRangeRestaurant = 55.59f, + mealAtMcDonaldSOrEquivalent = 8.89f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 3.29f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.16f, + waterAThirdOfLiterBottleInRestaurants = 1.65f, + milkRegularOneLiter = 1.48f, + waterOneAndHalfLiterBottleAtTheMarket = 1.98f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 3.15f, + banana1kg = 1.06f, + oranges1kg = 2.96f, + tomato1kg = 2.88f, + potato1kg = 1.91f, + onion1kg = 1.74f, + lettuceOneHead = 2.22f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 1.91f, + riceWhite1kg = 1.63f, + eggsRegular12 = 3.19f, + localCheese1kg = 10.28f, + chickenFillets1kg = 8.17f, + beefRound1kgOrEquivalentBackLegRedMeat = 10.93f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 154.9f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.19f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 54.66f, + fitnessClubMonthlyFeeForOneAdult = 55.59f, + tennisCourtRentOneHourOnWeekend = 48.17f, + cinemaInternationalReleaseOneSeat = 7.41f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 567.6f, + internationalPrimarySchoolYearlyForOneChild = 7893.24f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 29.65f, + oneSummerDressInAChainStoreZaraHAndM = 25.94f, + onePairOfNikeRunningShoesMidRange = 79.67f, + onePairOfMenLeatherBusinessShoes = 101.91f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 0.93f, + monthlyPassRegularPrice = 29.65f, + taxiStartNormalTariff = 2.59f, + taxi1kmNormalTariff = 0.56f, + taxi1hourWaitingNormalTariff = 22.23f, + gasolineOneLiter = 1.35f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 20752.19f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 20011.04f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = 1185.84f, + dataQuality = true + ), CityEntity( + cityName = "Chetumal", + country = "Mexico", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 12.56f, + mealFor2PeopleMidRangeRestaurant = 23.21f, + mealAtMcDonaldSOrEquivalent = 5.06f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 2.84f, + cokePepsiAThirdOfLiterBottleInRestaurants = 0.71f, + waterAThirdOfLiterBottleInRestaurants = 0.61f, + milkRegularOneLiter = 0.89f, + waterOneAndHalfLiterBottleAtTheMarket = 0.72f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 2.84f, + banana1kg = 1.03f, + oranges1kg = 1.37f, + tomato1kg = 1.55f, + potato1kg = 1.42f, + onion1kg = 1.03f, + lettuceOneHead = 0.93f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 1.55f, + riceWhite1kg = 1.16f, + eggsRegular12 = 1.5f, + localCheese1kg = 4.13f, + chickenFillets1kg = 4.38f, + beefRound1kgOrEquivalentBackLegRedMeat = null + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 99.25f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.26f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 27.21f, + fitnessClubMonthlyFeeForOneAdult = 18.05f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 3.09f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 61.88f, + internationalPrimarySchoolYearlyForOneChild = null + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 41.26f, + oneSummerDressInAChainStoreZaraHAndM = 36.1f, + onePairOfNikeRunningShoesMidRange = 77.35f, + onePairOfMenLeatherBusinessShoes = 51.57f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 0.57f, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 1.24f, + taxi1kmNormalTariff = 1.29f, + taxi1hourWaitingNormalTariff = 3.48f, + gasolineOneLiter = 1.11f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 21246.42f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 16759.92f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = 198.49f, + apartmentOneBedroomOutsideOfCentre = 126.98f, + apartment3BedroomsInCityCentre = 398.77f, + apartment3BedroomsOutsideOfCentre = 326.44f, + pricePerSquareMeterToBuyApartmentInCityCentre = 626.31f, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 309.41f + ), + averageMonthlyNetSalaryAfterTax = 257.84f, + dataQuality = true + ), + CityEntity( + cityName = "Kuysinjaq", + country = "Iraq", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 2.06f, + mealFor2PeopleMidRangeRestaurant = 10.96f, + mealAtMcDonaldSOrEquivalent = null + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 1.37f, + cokePepsiAThirdOfLiterBottleInRestaurants = 0.34f, + waterAThirdOfLiterBottleInRestaurants = 0.17f, + milkRegularOneLiter = 1.03f, + waterOneAndHalfLiterBottleAtTheMarket = 0.34f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 0.69f, + banana1kg = 1.03f, + oranges1kg = 1.03f, + tomato1kg = 0.51f, + potato1kg = 0.51f, + onion1kg = 0.51f, + lettuceOneHead = 0.34f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 0.69f, + riceWhite1kg = 1.03f, + eggsRegular12 = 1.37f, + localCheese1kg = 6.85f, + chickenFillets1kg = 3.43f, + beefRound1kgOrEquivalentBackLegRedMeat = 8.22f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = null, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.06f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 34.26f, + fitnessClubMonthlyFeeForOneAdult = 13.7f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 10.28f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 57.1f, + internationalPrimarySchoolYearlyForOneChild = 1027.75f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 13.7f, + oneSummerDressInAChainStoreZaraHAndM = 17.13f, + onePairOfNikeRunningShoesMidRange = null, + onePairOfMenLeatherBusinessShoes = 17.13f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 1.37f, + taxi1kmNormalTariff = 0.69f, + taxi1hourWaitingNormalTariff = 3.43f, + gasolineOneLiter = 0.62f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = null, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 16444.04f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = 137.03f, + apartmentOneBedroomOutsideOfCentre = 102.78f, + apartment3BedroomsInCityCentre = 205.55f, + apartment3BedroomsOutsideOfCentre = 171.29f, + pricePerSquareMeterToBuyApartmentInCityCentre = 342.58f, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 137.03f + ), + averageMonthlyNetSalaryAfterTax = 411.1f, + dataQuality = true + ) + ) + + } +} + + + + + + + + diff --git a/src/test/kotlin/data/EmptyFakeData.kt b/src/test/kotlin/data/EmptyFakeData.kt new file mode 100644 index 000000000..d81b5183d --- /dev/null +++ b/src/test/kotlin/data/EmptyFakeData.kt @@ -0,0 +1,20 @@ +package data + +import interactor.CostOfLivingDataSource +import model.* + + +object EmptyFakeData : CostOfLivingDataSource { + override fun getAllCitiesData(): List { + return emptyList() + + } +} + + + + + + + + diff --git a/src/test/kotlin/data/FakeDataSource.kt b/src/test/kotlin/data/FakeDataSource.kt new file mode 100644 index 000000000..56791681a --- /dev/null +++ b/src/test/kotlin/data/FakeDataSource.kt @@ -0,0 +1,6389 @@ +package data + +import interactor.CostOfLivingDataSource +import model.* + +enum class TestCase { + AverageFruitAndVegetables, + ManagerExpectations, + BananaCheapest, + CostlierCity, + CheapestInternet, + CheapestApartmentsInCities, + CitiesAverageSalary, + BestCityForSavingMoney, + CountriesTaxes, + FashionShopping, + InvalidData, + Empty, + AverageMonthlyNetSalary +} + + +class FakeDataSource : CostOfLivingDataSource { + + + fun changeDataSource(state: TestCase) { + dataSource = when (state) { + TestCase.ManagerExpectations -> managerExpectations + TestCase.AverageFruitAndVegetables -> averageFruitAndVegetables + TestCase.BananaCheapest -> bananaCheapest + TestCase.CostlierCity -> costlierCity + TestCase.CheapestInternet -> cheapestInternet + TestCase.CheapestApartmentsInCities -> cheapestApartmentsInCities + TestCase.CitiesAverageSalary -> citiesAverageSalary + TestCase.FashionShopping -> fashionShopping + TestCase.CountriesTaxes -> countriesTaxes + TestCase.BestCityForSavingMoney -> bestCityForSavingMoney + TestCase.InvalidData -> invalidData + TestCase.Empty -> empty + TestCase.AverageMonthlyNetSalary -> averageMonthlyNetSalary + } + } + + override fun getAllCitiesData(): List { + return dataSource + } + + private companion object { + + val averageMonthlyNetSalary = listOf( + CityEntity( + cityName = "Moncks Corner", + country = "United States", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 14.5f, + mealFor2PeopleMidRangeRestaurant = 40.0f, + mealAtMcDonaldSOrEquivalent = 7.5f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 4.33f, + cokePepsiAThirdOfLiterBottleInRestaurants = 1.0f, + waterAThirdOfLiterBottleInRestaurants = 1.0f, + milkRegularOneLiter = 0.91f, + waterOneAndHalfLiterBottleAtTheMarket = 1.75f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 0.1f, + banana1kg = 0.1f, + oranges1kg = 0.1f, + tomato1kg = 0.1f, + potato1kg = 0.1f, + onion1kg = 0.1f, + lettuceOneHead = 0.1f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 2.2f, + riceWhite1kg = 2.62f, + eggsRegular12 = 2.17f, + localCheese1kg = 11.02f, + chickenFillets1kg = 8.8f, + beefRound1kgOrEquivalentBackLegRedMeat = 15.76f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 144.92f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.0f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 67.78f, + fitnessClubMonthlyFeeForOneAdult = null, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 9.0f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 1500.0f, + internationalPrimarySchoolYearlyForOneChild = null + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 52.0f, + oneSummerDressInAChainStoreZaraHAndM = 46.33f, + onePairOfNikeRunningShoesMidRange = 94.67f, + onePairOfMenLeatherBusinessShoes = 90.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 2.1f, + taxi1kmNormalTariff = 1.49f, + taxi1hourWaitingNormalTariff = 15.0f, + gasolineOneLiter = 0.92f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = null, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 28500.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = null, + dataQuality = false + ), + CityEntity( + cityName = "Moncks Corner", + country = "United States", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 14.5f, + mealFor2PeopleMidRangeRestaurant = 40.0f, + mealAtMcDonaldSOrEquivalent = 7.5f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 4.33f, + cokePepsiAThirdOfLiterBottleInRestaurants = 1.0f, + waterAThirdOfLiterBottleInRestaurants = 1.0f, + milkRegularOneLiter = 0.91f, + waterOneAndHalfLiterBottleAtTheMarket = 1.75f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 0.1f, + banana1kg = 0.1f, + oranges1kg = 0.1f, + tomato1kg = 0.1f, + potato1kg = 0.1f, + onion1kg = 0.1f, + lettuceOneHead = 0.1f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 2.2f, + riceWhite1kg = 2.62f, + eggsRegular12 = 2.17f, + localCheese1kg = 11.02f, + chickenFillets1kg = 8.8f, + beefRound1kgOrEquivalentBackLegRedMeat = 15.76f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 144.92f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.0f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 67.78f, + fitnessClubMonthlyFeeForOneAdult = null, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 9.0f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 1500.0f, + internationalPrimarySchoolYearlyForOneChild = null + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 52.0f, + oneSummerDressInAChainStoreZaraHAndM = 46.33f, + onePairOfNikeRunningShoesMidRange = 94.67f, + onePairOfMenLeatherBusinessShoes = 90.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 2.1f, + taxi1kmNormalTariff = 1.49f, + taxi1hourWaitingNormalTariff = 15.0f, + gasolineOneLiter = 0.92f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = null, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 28500.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = Float.NaN, + dataQuality = false + ) + ) + val fake = listOf( + + CityEntity( + cityName = "Moncks Corner", + country = "United States", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 14.5f, + mealFor2PeopleMidRangeRestaurant = 40.0f, + mealAtMcDonaldSOrEquivalent = 7.5f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 4.33f, + cokePepsiAThirdOfLiterBottleInRestaurants = 1.0f, + waterAThirdOfLiterBottleInRestaurants = 1.0f, + milkRegularOneLiter = 0.91f, + waterOneAndHalfLiterBottleAtTheMarket = 1.75f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 0.1f, + banana1kg = 0.1f, + oranges1kg = 0.1f, + tomato1kg = 0.1f, + potato1kg = 0.1f, + onion1kg = 0.1f, + lettuceOneHead = 0.1f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 2.2f, + riceWhite1kg = 2.62f, + eggsRegular12 = 2.17f, + localCheese1kg = 11.02f, + chickenFillets1kg = 8.8f, + beefRound1kgOrEquivalentBackLegRedMeat = 15.76f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 144.92f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.0f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 67.78f, + fitnessClubMonthlyFeeForOneAdult = null, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 9.0f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 1500.0f, + internationalPrimarySchoolYearlyForOneChild = null + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 52.0f, + oneSummerDressInAChainStoreZaraHAndM = 46.33f, + onePairOfNikeRunningShoesMidRange = 94.67f, + onePairOfMenLeatherBusinessShoes = 90.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 2.1f, + taxi1kmNormalTariff = 1.49f, + taxi1hourWaitingNormalTariff = 15.0f, + gasolineOneLiter = 0.92f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = null, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 28500.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = Float.NaN, + dataQuality = false + ), + + + CityEntity( + cityName = "Keller", + country = "United States", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 30.0f, + mealFor2PeopleMidRangeRestaurant = 75.0f, + mealAtMcDonaldSOrEquivalent = 7.5f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 5.33f, + cokePepsiAThirdOfLiterBottleInRestaurants = 1.8f, + waterAThirdOfLiterBottleInRestaurants = 1.17f, + milkRegularOneLiter = 0.88f, + waterOneAndHalfLiterBottleAtTheMarket = 3.0f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 4.13f, + banana1kg = 1.33f, + oranges1kg = 5.75f, + tomato1kg = 6.03f, + potato1kg = 4.05f, + onion1kg = 3.36f, + lettuceOneHead = 1.59f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 2.84f, + riceWhite1kg = 3.98f, + eggsRegular12 = 3.0f, + localCheese1kg = 15.08f, + chickenFillets1kg = 7.61f, + beefRound1kgOrEquivalentBackLegRedMeat = 18.7f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 210.09f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = null, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 67.8f, + fitnessClubMonthlyFeeForOneAdult = 39.0f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 9.5f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 1125.0f, + internationalPrimarySchoolYearlyForOneChild = null + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 47.5f, + oneSummerDressInAChainStoreZaraHAndM = 26.0f, + onePairOfNikeRunningShoesMidRange = 92.5f, + onePairOfMenLeatherBusinessShoes = 200.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 3.12f, + taxi1kmNormalTariff = 1.12f, + taxi1hourWaitingNormalTariff = 18.0f, + gasolineOneLiter = 0.99f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 29880.0f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 20425.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = 1521.67f, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = 3200.0f, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = 13.5f, + dataQuality = false + ), + + + CityEntity( + cityName = "Malden", + country = "United States", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = null, + mealFor2PeopleMidRangeRestaurant = null, + mealAtMcDonaldSOrEquivalent = 7.5f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 4.5f, + cokePepsiAThirdOfLiterBottleInRestaurants = null, + waterAThirdOfLiterBottleInRestaurants = 2.0f, + milkRegularOneLiter = null, + waterOneAndHalfLiterBottleAtTheMarket = 1.33f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 4.92f, + banana1kg = 2.0f, + oranges1kg = 6.61f, + tomato1kg = 5.51f, + potato1kg = 5.51f, + onion1kg = 4.4f, + lettuceOneHead = 2.03f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = null, + riceWhite1kg = 6.17f, + eggsRegular12 = null, + localCheese1kg = 9.92f, + chickenFillets1kg = null, + beefRound1kgOrEquivalentBackLegRedMeat = null + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 221.47f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = null, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 67.8f, + fitnessClubMonthlyFeeForOneAdult = null, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 12.0f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = null, + internationalPrimarySchoolYearlyForOneChild = 5000.0f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 51.66f, + oneSummerDressInAChainStoreZaraHAndM = 50.0f, + onePairOfNikeRunningShoesMidRange = 69.99f, + onePairOfMenLeatherBusinessShoes = 104.67f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 2.5f, + monthlyPassRegularPrice = 84.0f, + taxiStartNormalTariff = null, + taxi1kmNormalTariff = null, + taxi1hourWaitingNormalTariff = null, + gasolineOneLiter = null + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = null, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 20000.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = 10763.91f, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 6458.35f + ), + averageMonthlyNetSalaryAfterTax = 14.9f, + dataQuality = false + ), + + + CityEntity( + cityName = "Pearl City", + country = "United States", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = null, + mealFor2PeopleMidRangeRestaurant = null, + mealAtMcDonaldSOrEquivalent = 10.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 5.25f, + cokePepsiAThirdOfLiterBottleInRestaurants = null, + waterAThirdOfLiterBottleInRestaurants = 1.44f, + milkRegularOneLiter = 2.38f, + waterOneAndHalfLiterBottleAtTheMarket = 2.08f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 5.91f, + banana1kg = 3.84f, + oranges1kg = 7.02f, + tomato1kg = 5.94f, + potato1kg = 4.95f, + onion1kg = 4.44f, + lettuceOneHead = 2.74f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 4.41f, + riceWhite1kg = 7.33f, + eggsRegular12 = null, + localCheese1kg = 12.13f, + chickenFillets1kg = null, + beefRound1kgOrEquivalentBackLegRedMeat = 26.46f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 251.16f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = null, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 68.12f, + fitnessClubMonthlyFeeForOneAdult = 60.0f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = null, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = null, + internationalPrimarySchoolYearlyForOneChild = null + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 47.55f, + oneSummerDressInAChainStoreZaraHAndM = 35.87f, + onePairOfNikeRunningShoesMidRange = 79.29f, + onePairOfMenLeatherBusinessShoes = null + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = null, + taxi1kmNormalTariff = null, + taxi1hourWaitingNormalTariff = null, + gasolineOneLiter = null + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = null, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 21105.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = 2000.0f, + apartmentOneBedroomOutsideOfCentre = 1750.0f, + apartment3BedroomsInCityCentre = 5000.0f, + apartment3BedroomsOutsideOfCentre = 4750.0f, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = 12.0f, + dataQuality = false + ), + + + CityEntity( + cityName = "Clayton", + country = "United States", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 10.0f, + mealFor2PeopleMidRangeRestaurant = 32.0f, + mealAtMcDonaldSOrEquivalent = 6.85f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 4.0f, + cokePepsiAThirdOfLiterBottleInRestaurants = null, + waterAThirdOfLiterBottleInRestaurants = 1.29f, + milkRegularOneLiter = 0.86f, + waterOneAndHalfLiterBottleAtTheMarket = 0.79f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 2.65f, + banana1kg = 1.34f, + oranges1kg = null, + tomato1kg = 2.43f, + potato1kg = null, + onion1kg = 1.94f, + lettuceOneHead = 1.5f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 2.48f, + riceWhite1kg = null, + eggsRegular12 = 2.4f, + localCheese1kg = null, + chickenFillets1kg = null, + beefRound1kgOrEquivalentBackLegRedMeat = 12.13f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 132.0f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = null, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 68.33f, + fitnessClubMonthlyFeeForOneAdult = null, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 11.25f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = null, + internationalPrimarySchoolYearlyForOneChild = null + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = null, + oneSummerDressInAChainStoreZaraHAndM = null, + onePairOfNikeRunningShoesMidRange = 70.0f, + onePairOfMenLeatherBusinessShoes = null + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = null, + taxi1kmNormalTariff = null, + taxi1hourWaitingNormalTariff = null, + gasolineOneLiter = 1.07f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = null, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 22000.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = 1300.0f, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 2690.98f + ), + averageMonthlyNetSalaryAfterTax = 500f, + dataQuality = false + ), + + + CityEntity( + cityName = "Brevard", + country = "United States", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 15.0f, + mealFor2PeopleMidRangeRestaurant = 45.0f, + mealAtMcDonaldSOrEquivalent = 7.75f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 4.79f, + cokePepsiAThirdOfLiterBottleInRestaurants = 1.5f, + waterAThirdOfLiterBottleInRestaurants = 1.79f, + milkRegularOneLiter = 2.07f, + waterOneAndHalfLiterBottleAtTheMarket = 1.92f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 3.72f, + banana1kg = 1.26f, + oranges1kg = 4.23f, + tomato1kg = 5.49f, + potato1kg = 4.35f, + onion1kg = 3.17f, + lettuceOneHead = 2.22f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 2.6f, + riceWhite1kg = 3.56f, + eggsRegular12 = 2.59f, + localCheese1kg = 14.7f, + chickenFillets1kg = 11.02f, + beefRound1kgOrEquivalentBackLegRedMeat = 13.0f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 118.5f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = null, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 68.33f, + fitnessClubMonthlyFeeForOneAdult = 60.0f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 10.69f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = null, + internationalPrimarySchoolYearlyForOneChild = null + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 54.5f, + oneSummerDressInAChainStoreZaraHAndM = 50.5f, + onePairOfNikeRunningShoesMidRange = 78.33f, + onePairOfMenLeatherBusinessShoes = 141.67f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = null, + taxi1kmNormalTariff = null, + taxi1hourWaitingNormalTariff = null, + gasolineOneLiter = 1.11f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = null, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 23750.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = 1300.0f, + apartmentOneBedroomOutsideOfCentre = 975.0f, + apartment3BedroomsInCityCentre = 1700.0f, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = 600f, + dataQuality = false + ), + + + CityEntity( + cityName = "Woodlawn", + country = "United States", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 11.0f, + mealFor2PeopleMidRangeRestaurant = 60.0f, + mealAtMcDonaldSOrEquivalent = 8.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 3.2f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.33f, + waterAThirdOfLiterBottleInRestaurants = 1.5f, + milkRegularOneLiter = 1.1f, + waterOneAndHalfLiterBottleAtTheMarket = 1.85f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 4.03f, + banana1kg = 1.57f, + oranges1kg = 4.65f, + tomato1kg = 3.64f, + potato1kg = 2.69f, + onion1kg = 2.2f, + lettuceOneHead = 1.73f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 1.74f, + riceWhite1kg = 3.38f, + eggsRegular12 = 1.79f, + localCheese1kg = 7.27f, + chickenFillets1kg = 4.39f, + beefRound1kgOrEquivalentBackLegRedMeat = 11.02f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 122.31f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.03f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 68.33f, + fitnessClubMonthlyFeeForOneAdult = null, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 13.25f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 800.0f, + internationalPrimarySchoolYearlyForOneChild = 5000.0f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 46.5f, + oneSummerDressInAChainStoreZaraHAndM = 26.25f, + onePairOfNikeRunningShoesMidRange = 59.6f, + onePairOfMenLeatherBusinessShoes = 76.67f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 2.0f, + taxi1kmNormalTariff = 1.23f, + taxi1hourWaitingNormalTariff = 20.0f, + gasolineOneLiter = 1.16f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 25500.0f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 23666.67f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = 1000f, + dataQuality = false + ), + + + CityEntity( + cityName = "Brookdale", + country = "United States", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = null, + mealFor2PeopleMidRangeRestaurant = 50.0f, + mealAtMcDonaldSOrEquivalent = 8.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 5.0f, + cokePepsiAThirdOfLiterBottleInRestaurants = null, + waterAThirdOfLiterBottleInRestaurants = 1.27f, + milkRegularOneLiter = null, + waterOneAndHalfLiterBottleAtTheMarket = 1.87f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 4.4f, + banana1kg = 1.97f, + oranges1kg = 2.85f, + tomato1kg = 2.58f, + potato1kg = 1.42f, + onion1kg = 1.96f, + lettuceOneHead = 1.5f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = null, + riceWhite1kg = 5.5f, + eggsRegular12 = null, + localCheese1kg = 12.0f, + chickenFillets1kg = null, + beefRound1kgOrEquivalentBackLegRedMeat = null + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 158.47f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = null, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 68.33f, + fitnessClubMonthlyFeeForOneAdult = null, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 11.75f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = null, + internationalPrimarySchoolYearlyForOneChild = null + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 45.0f, + oneSummerDressInAChainStoreZaraHAndM = 37.5f, + onePairOfNikeRunningShoesMidRange = 65.0f, + onePairOfMenLeatherBusinessShoes = 95.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = null, + taxi1kmNormalTariff = null, + taxi1hourWaitingNormalTariff = null, + gasolineOneLiter = null + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = null, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = null + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = 2690.98f, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 2690.98f + ), + averageMonthlyNetSalaryAfterTax = 1000f, + dataQuality = false + ), + + + CityEntity( + cityName = "Christiansburg", + country = "United States", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 13.0f, + mealFor2PeopleMidRangeRestaurant = 45.0f, + mealAtMcDonaldSOrEquivalent = 7.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 3.77f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.0f, + waterAThirdOfLiterBottleInRestaurants = 1.34f, + milkRegularOneLiter = 0.91f, + waterOneAndHalfLiterBottleAtTheMarket = 2.08f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 4.55f, + banana1kg = 2.7f, + oranges1kg = 4.62f, + tomato1kg = 3.04f, + potato1kg = 1.76f, + onion1kg = 2.89f, + lettuceOneHead = 1.65f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 3.64f, + riceWhite1kg = 4.09f, + eggsRegular12 = 2.5f, + localCheese1kg = 10.71f, + chickenFillets1kg = 11.76f, + beefRound1kgOrEquivalentBackLegRedMeat = 13.04f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 162.37f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.22f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 68.37f, + fitnessClubMonthlyFeeForOneAdult = 15.0f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 12.0f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = null, + internationalPrimarySchoolYearlyForOneChild = 35000.0f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 35.0f, + oneSummerDressInAChainStoreZaraHAndM = 31.99f, + onePairOfNikeRunningShoesMidRange = 71.25f, + onePairOfMenLeatherBusinessShoes = 120.71f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 1.75f, + monthlyPassRegularPrice = 28.0f, + taxiStartNormalTariff = 2.5f, + taxi1kmNormalTariff = 1.09f, + taxi1hourWaitingNormalTariff = null, + gasolineOneLiter = 1.15f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 23500.0f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 23000.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = 800.0f, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = 3000f, + dataQuality = false + ), + + + CityEntity( + cityName = "Kernersville", + country = "United States", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 15.0f, + mealFor2PeopleMidRangeRestaurant = 60.0f, + mealAtMcDonaldSOrEquivalent = 7.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 3.77f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.0f, + waterAThirdOfLiterBottleInRestaurants = 1.34f, + milkRegularOneLiter = 0.89f, + waterOneAndHalfLiterBottleAtTheMarket = 2.0f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 4.92f, + banana1kg = 1.63f, + oranges1kg = 4.62f, + tomato1kg = 3.95f, + potato1kg = 2.99f, + onion1kg = 2.78f, + lettuceOneHead = 1.5f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 2.99f, + riceWhite1kg = 4.09f, + eggsRegular12 = 2.5f, + localCheese1kg = 8.07f, + chickenFillets1kg = 11.76f, + beefRound1kgOrEquivalentBackLegRedMeat = 13.65f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 149.11f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.22f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 68.37f, + fitnessClubMonthlyFeeForOneAdult = null, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 12.0f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 975.0f, + internationalPrimarySchoolYearlyForOneChild = 15125.0f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 40.75f, + oneSummerDressInAChainStoreZaraHAndM = 31.99f, + onePairOfNikeRunningShoesMidRange = 71.25f, + onePairOfMenLeatherBusinessShoes = 91.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 2.5f, + taxi1kmNormalTariff = 1.09f, + taxi1hourWaitingNormalTariff = 30.0f, + gasolineOneLiter = 1.15f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 23500.0f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 23166.67f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = 23f, + dataQuality = false + ), + + + CityEntity( + cityName = "Airway Heights", + country = "United States", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 15.0f, + mealFor2PeopleMidRangeRestaurant = 77.5f, + mealAtMcDonaldSOrEquivalent = 10.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 5.17f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.86f, + waterAThirdOfLiterBottleInRestaurants = 2.0f, + milkRegularOneLiter = 0.79f, + waterOneAndHalfLiterBottleAtTheMarket = 1.7f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 4.86f, + banana1kg = 1.64f, + oranges1kg = 4.32f, + tomato1kg = 4.36f, + potato1kg = 2.17f, + onion1kg = 2.4f, + lettuceOneHead = 1.67f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 2.76f, + riceWhite1kg = 3.93f, + eggsRegular12 = 2.0f, + localCheese1kg = 12.61f, + chickenFillets1kg = 10.93f, + beefRound1kgOrEquivalentBackLegRedMeat = 13.21f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 225.31f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.06f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 68.4f, + fitnessClubMonthlyFeeForOneAdult = 65.0f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 13.0f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 300.0f, + internationalPrimarySchoolYearlyForOneChild = 19750.0f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 47.71f, + oneSummerDressInAChainStoreZaraHAndM = 36.67f, + onePairOfNikeRunningShoesMidRange = 86.86f, + onePairOfMenLeatherBusinessShoes = 94.57f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 3.0f, + monthlyPassRegularPrice = 60.0f, + taxiStartNormalTariff = 5.0f, + taxi1kmNormalTariff = 1.15f, + taxi1hourWaitingNormalTariff = 35.0f, + gasolineOneLiter = 1.27f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 18597.5f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 17300.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = 1300.0f, + apartmentOneBedroomOutsideOfCentre = 1300.0f, + apartment3BedroomsInCityCentre = 1800.0f, + apartment3BedroomsOutsideOfCentre = 1800.0f, + pricePerSquareMeterToBuyApartmentInCityCentre = 6070.85f, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 4886.82f + ), + averageMonthlyNetSalaryAfterTax = 13f, + dataQuality = false + ), + + + CityEntity( + cityName = "Vryheid", + country = "South Africa", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = null, + mealFor2PeopleMidRangeRestaurant = null, + mealAtMcDonaldSOrEquivalent = null + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = null, + cokePepsiAThirdOfLiterBottleInRestaurants = null, + waterAThirdOfLiterBottleInRestaurants = null, + milkRegularOneLiter = 1.94f, + waterOneAndHalfLiterBottleAtTheMarket = 1.03f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 1.14f, + banana1kg = 1.71f, + oranges1kg = 0.97f, + tomato1kg = 1.31f, + potato1kg = 0.91f, + onion1kg = 1.08f, + lettuceOneHead = 1.08f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 0.93f, + riceWhite1kg = 3.71f, + eggsRegular12 = 2.51f, + localCheese1kg = 8.05f, + chickenFillets1kg = 3.82f, + beefRound1kgOrEquivalentBackLegRedMeat = 5.7f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 114.05f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = null, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 68.43f, + fitnessClubMonthlyFeeForOneAdult = null, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = null, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 256.62f, + internationalPrimarySchoolYearlyForOneChild = 1140.54f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 56.97f, + oneSummerDressInAChainStoreZaraHAndM = 42.71f, + onePairOfNikeRunningShoesMidRange = 102.65f, + onePairOfMenLeatherBusinessShoes = 116.28f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 0.6f, + taxi1kmNormalTariff = null, + taxi1hourWaitingNormalTariff = 3.99f, + gasolineOneLiter = 1.49f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 17672.6f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 23586.27f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = 324f, + dataQuality = false + ), + + + CityEntity( + cityName = "Mortsel", + country = "Belgium", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 23.18f, + mealFor2PeopleMidRangeRestaurant = 73.76f, + mealAtMcDonaldSOrEquivalent = 11.85f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 2.74f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.11f, + waterAThirdOfLiterBottleInRestaurants = 2.46f, + milkRegularOneLiter = 0.83f, + waterOneAndHalfLiterBottleAtTheMarket = 0.46f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 2.02f, + banana1kg = 1.55f, + oranges1kg = 1.48f, + tomato1kg = 2.51f, + potato1kg = 0.95f, + onion1kg = 1.58f, + lettuceOneHead = 0.95f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 1.88f, + riceWhite1kg = 1.48f, + eggsRegular12 = 2.25f, + localCheese1kg = 10.71f, + chickenFillets1kg = 7.38f, + beefRound1kgOrEquivalentBackLegRedMeat = 14.01f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 180.01f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.26f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 68.49f, + fitnessClubMonthlyFeeForOneAdult = 31.6f, + tennisCourtRentOneHourOnWeekend = 15.81f, + cinemaInternationalReleaseOneSeat = 13.01f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 1580.62f, + internationalPrimarySchoolYearlyForOneChild = 13171.82f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 79.03f, + oneSummerDressInAChainStoreZaraHAndM = 36.88f, + onePairOfNikeRunningShoesMidRange = 94.84f, + onePairOfMenLeatherBusinessShoes = 105.37f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 2.63f, + monthlyPassRegularPrice = 51.63f, + taxiStartNormalTariff = 5.27f, + taxi1kmNormalTariff = 2.37f, + taxi1hourWaitingNormalTariff = 31.61f, + gasolineOneLiter = 2.08f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 15279.31f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 15279.31f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = 790.31f, + apartmentOneBedroomOutsideOfCentre = 737.62f, + apartment3BedroomsInCityCentre = 1475.24f, + apartment3BedroomsOutsideOfCentre = 1159.12f, + pricePerSquareMeterToBuyApartmentInCityCentre = 2528.99f, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 2212.86f + ), + averageMonthlyNetSalaryAfterTax = 31f, + dataQuality = false + ), + + + CityEntity( + cityName = "Ridgecrest", + country = "United States", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 20.0f, + mealFor2PeopleMidRangeRestaurant = 40.0f, + mealAtMcDonaldSOrEquivalent = 8.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 4.67f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.67f, + waterAThirdOfLiterBottleInRestaurants = 1.47f, + milkRegularOneLiter = 1.11f, + waterOneAndHalfLiterBottleAtTheMarket = 1.5f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 5.0f, + banana1kg = 1.8f, + oranges1kg = 4.29f, + tomato1kg = 5.68f, + potato1kg = 2.64f, + onion1kg = 2.16f, + lettuceOneHead = 1.81f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 3.37f, + riceWhite1kg = 4.41f, + eggsRegular12 = 3.22f, + localCheese1kg = 6.61f, + chickenFillets1kg = 10.28f, + beefRound1kgOrEquivalentBackLegRedMeat = 15.98f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 157.63f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.26f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 68.6f, + fitnessClubMonthlyFeeForOneAdult = 30.0f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 18.0f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 1466.67f, + internationalPrimarySchoolYearlyForOneChild = 27500.0f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 51.85f, + oneSummerDressInAChainStoreZaraHAndM = 33.33f, + onePairOfNikeRunningShoesMidRange = 87.5f, + onePairOfMenLeatherBusinessShoes = 134.29f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 3.5f, + taxi1kmNormalTariff = 1.71f, + taxi1hourWaitingNormalTariff = 65.0f, + gasolineOneLiter = 1.68f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 23292.0f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 22741.5f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = 1000.0f, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = 14f, + dataQuality = false + ), + CityEntity( + cityName = "Great Falls", + country = "United States", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 15.0f, + mealFor2PeopleMidRangeRestaurant = 40.0f, + mealAtMcDonaldSOrEquivalent = 9.5f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 4.5f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.02f, + waterAThirdOfLiterBottleInRestaurants = 1.71f, + milkRegularOneLiter = 1.02f, + waterOneAndHalfLiterBottleAtTheMarket = 1.86f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 4.41f, + banana1kg = 1.58f, + oranges1kg = 3.93f, + tomato1kg = 4.41f, + potato1kg = 1.65f, + onion1kg = 2.08f, + lettuceOneHead = 1.25f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 2.95f, + riceWhite1kg = 4.12f, + eggsRegular12 = 3.25f, + localCheese1kg = 9.92f, + chickenFillets1kg = 11.01f, + beefRound1kgOrEquivalentBackLegRedMeat = 13.23f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 145.61f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.15f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 65.83f, + fitnessClubMonthlyFeeForOneAdult = null, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 10.0f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 2500.0f, + internationalPrimarySchoolYearlyForOneChild = 75000.0f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 51.25f, + oneSummerDressInAChainStoreZaraHAndM = 27.5f, + onePairOfNikeRunningShoesMidRange = 70.0f, + onePairOfMenLeatherBusinessShoes = 120.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 1.5f, + monthlyPassRegularPrice = 55.0f, + taxiStartNormalTariff = 9.5f, + taxi1kmNormalTariff = 1.46f, + taxi1hourWaitingNormalTariff = 25.0f, + gasolineOneLiter = 1.44f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 31000.0f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 23000.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = 750.0f, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = 1600.0f, + apartment3BedroomsOutsideOfCentre = 2250.0f, + pricePerSquareMeterToBuyApartmentInCityCentre = 2583.34f, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 7965.29f + ), + averageMonthlyNetSalaryAfterTax = 1000.0f, + dataQuality = false + ), CityEntity( + cityName = "Roseburg", + country = "United States", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 15.0f, + mealFor2PeopleMidRangeRestaurant = 60.0f, + mealAtMcDonaldSOrEquivalent = 8.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 4.49f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.22f, + waterAThirdOfLiterBottleInRestaurants = 1.26f, + milkRegularOneLiter = 0.98f, + waterOneAndHalfLiterBottleAtTheMarket = 1.0f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 2.3f, + banana1kg = 0.99f, + oranges1kg = 2.2f, + tomato1kg = 1.1f, + potato1kg = 1.71f, + onion1kg = 1.62f, + lettuceOneHead = 1.83f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 3.04f, + riceWhite1kg = 2.2f, + eggsRegular12 = 1.69f, + localCheese1kg = 12.9f, + chickenFillets1kg = 16.17f, + beefRound1kgOrEquivalentBackLegRedMeat = 12.49f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 100.0f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.25f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 55.0f, + fitnessClubMonthlyFeeForOneAdult = 50.0f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 12.5f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 921.42f, + internationalPrimarySchoolYearlyForOneChild = 8950.0f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 41.67f, + oneSummerDressInAChainStoreZaraHAndM = 25.0f, + onePairOfNikeRunningShoesMidRange = 63.33f, + onePairOfMenLeatherBusinessShoes = 50.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 2.0f, + monthlyPassRegularPrice = 20.0f, + taxiStartNormalTariff = 3.0f, + taxi1kmNormalTariff = 1.86f, + taxi1hourWaitingNormalTariff = 15.0f, + gasolineOneLiter = 1.36f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 20000.0f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 22328.2f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = 1300.0f, + apartmentOneBedroomOutsideOfCentre = 1475.0f, + apartment3BedroomsInCityCentre = 2350.0f, + apartment3BedroomsOutsideOfCentre = 2625.0f, + pricePerSquareMeterToBuyApartmentInCityCentre = 1883.68f, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 1614.59f + ), + averageMonthlyNetSalaryAfterTax = 1200.0f, + dataQuality = false + ), + CityEntity( + cityName = "Moose Jaw", + country = "Canada", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 14.82f, + mealFor2PeopleMidRangeRestaurant = 55.59f, + mealAtMcDonaldSOrEquivalent = 8.89f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 3.29f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.16f, + waterAThirdOfLiterBottleInRestaurants = 1.65f, + milkRegularOneLiter = 1.48f, + waterOneAndHalfLiterBottleAtTheMarket = 1.98f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 3.15f, + banana1kg = 1.06f, + oranges1kg = 2.96f, + tomato1kg = 2.88f, + potato1kg = 1.91f, + onion1kg = 1.74f, + lettuceOneHead = 2.22f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 1.91f, + riceWhite1kg = 1.63f, + eggsRegular12 = 3.19f, + localCheese1kg = 10.28f, + chickenFillets1kg = 8.17f, + beefRound1kgOrEquivalentBackLegRedMeat = 10.93f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 154.9f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.19f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 54.66f, + fitnessClubMonthlyFeeForOneAdult = 55.59f, + tennisCourtRentOneHourOnWeekend = 48.17f, + cinemaInternationalReleaseOneSeat = 7.41f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 567.6f, + internationalPrimarySchoolYearlyForOneChild = 7893.24f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 29.65f, + oneSummerDressInAChainStoreZaraHAndM = 25.94f, + onePairOfNikeRunningShoesMidRange = 79.67f, + onePairOfMenLeatherBusinessShoes = 101.91f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 0.93f, + monthlyPassRegularPrice = 29.65f, + taxiStartNormalTariff = 2.59f, + taxi1kmNormalTariff = 0.56f, + taxi1hourWaitingNormalTariff = 22.23f, + gasolineOneLiter = 1.35f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 20752.19f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 20011.04f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = 1185.84f, + dataQuality = false + ), CityEntity( + cityName = "Chetumal", + country = "Mexico", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 12.56f, + mealFor2PeopleMidRangeRestaurant = 23.21f, + mealAtMcDonaldSOrEquivalent = 5.06f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 2.84f, + cokePepsiAThirdOfLiterBottleInRestaurants = 0.71f, + waterAThirdOfLiterBottleInRestaurants = 0.61f, + milkRegularOneLiter = 0.89f, + waterOneAndHalfLiterBottleAtTheMarket = 0.72f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 2.84f, + banana1kg = 1.03f, + oranges1kg = 1.37f, + tomato1kg = 1.55f, + potato1kg = 1.42f, + onion1kg = 1.03f, + lettuceOneHead = 0.93f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 1.55f, + riceWhite1kg = 1.16f, + eggsRegular12 = 1.5f, + localCheese1kg = 4.13f, + chickenFillets1kg = 4.38f, + beefRound1kgOrEquivalentBackLegRedMeat = null + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 99.25f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.26f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 27.21f, + fitnessClubMonthlyFeeForOneAdult = 18.05f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 3.09f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 61.88f, + internationalPrimarySchoolYearlyForOneChild = null + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 41.26f, + oneSummerDressInAChainStoreZaraHAndM = 36.1f, + onePairOfNikeRunningShoesMidRange = 77.35f, + onePairOfMenLeatherBusinessShoes = 51.57f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 0.57f, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 1.24f, + taxi1kmNormalTariff = 1.29f, + taxi1hourWaitingNormalTariff = 3.48f, + gasolineOneLiter = 1.11f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 21246.42f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 16759.92f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = 198.49f, + apartmentOneBedroomOutsideOfCentre = 126.98f, + apartment3BedroomsInCityCentre = 398.77f, + apartment3BedroomsOutsideOfCentre = 326.44f, + pricePerSquareMeterToBuyApartmentInCityCentre = 626.31f, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 309.41f + ), + averageMonthlyNetSalaryAfterTax = 257.84f, + dataQuality = false + ), + CityEntity( + cityName = "Kuysinjaq", + country = "Iraq", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 2.06f, + mealFor2PeopleMidRangeRestaurant = 10.96f, + mealAtMcDonaldSOrEquivalent = null + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 1.37f, + cokePepsiAThirdOfLiterBottleInRestaurants = 0.34f, + waterAThirdOfLiterBottleInRestaurants = 0.17f, + milkRegularOneLiter = 1.03f, + waterOneAndHalfLiterBottleAtTheMarket = 0.34f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 0.69f, + banana1kg = 1.03f, + oranges1kg = 1.03f, + tomato1kg = 0.51f, + potato1kg = 0.51f, + onion1kg = 0.51f, + lettuceOneHead = 0.34f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 0.69f, + riceWhite1kg = 1.03f, + eggsRegular12 = 1.37f, + localCheese1kg = 6.85f, + chickenFillets1kg = 3.43f, + beefRound1kgOrEquivalentBackLegRedMeat = 8.22f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = null, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.06f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 34.26f, + fitnessClubMonthlyFeeForOneAdult = 13.7f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 10.28f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 57.1f, + internationalPrimarySchoolYearlyForOneChild = 1027.75f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 13.7f, + oneSummerDressInAChainStoreZaraHAndM = 17.13f, + onePairOfNikeRunningShoesMidRange = null, + onePairOfMenLeatherBusinessShoes = 17.13f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 1.37f, + taxi1kmNormalTariff = 0.69f, + taxi1hourWaitingNormalTariff = 3.43f, + gasolineOneLiter = 0.62f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = null, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 16444.04f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = 137.03f, + apartmentOneBedroomOutsideOfCentre = 102.78f, + apartment3BedroomsInCityCentre = 205.55f, + apartment3BedroomsOutsideOfCentre = 171.29f, + pricePerSquareMeterToBuyApartmentInCityCentre = 342.58f, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 137.03f + ), + averageMonthlyNetSalaryAfterTax = 411.1f, + dataQuality = false + ) + ) + private var dataSource = fake + val managerExpectations = listOf( + CityEntity( + cityName = "Great Falls", + country = "United States", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 15.0f, + mealFor2PeopleMidRangeRestaurant = 40.0f, + mealAtMcDonaldSOrEquivalent = 9.5f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 4.5f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.02f, + waterAThirdOfLiterBottleInRestaurants = 1.71f, + milkRegularOneLiter = 1.02f, + waterOneAndHalfLiterBottleAtTheMarket = 1.86f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 4.41f, + banana1kg = 1.58f, + oranges1kg = 3.93f, + tomato1kg = 4.41f, + potato1kg = 1.65f, + onion1kg = 2.08f, + lettuceOneHead = 1.25f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 2.95f, + riceWhite1kg = 4.12f, + eggsRegular12 = 3.25f, + localCheese1kg = 9.92f, + chickenFillets1kg = 11.01f, + beefRound1kgOrEquivalentBackLegRedMeat = 13.23f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 145.61f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.15f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 65.83f, + fitnessClubMonthlyFeeForOneAdult = null, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 10.0f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 2500.0f, + internationalPrimarySchoolYearlyForOneChild = 75000.0f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 51.25f, + oneSummerDressInAChainStoreZaraHAndM = 27.5f, + onePairOfNikeRunningShoesMidRange = 70.0f, + onePairOfMenLeatherBusinessShoes = 120.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 1.5f, + monthlyPassRegularPrice = 55.0f, + taxiStartNormalTariff = 9.5f, + taxi1kmNormalTariff = 1.46f, + taxi1hourWaitingNormalTariff = 25.0f, + gasolineOneLiter = 1.44f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 31000.0f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 23000.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = 750.0f, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = 1600.0f, + apartment3BedroomsOutsideOfCentre = 2250.0f, + pricePerSquareMeterToBuyApartmentInCityCentre = 2583.34f, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 7965.29f + ), + averageMonthlyNetSalaryAfterTax = 1000.0f, + dataQuality = false + ), CityEntity( + cityName = "Roseburg", + country = "United States", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 15.0f, + mealFor2PeopleMidRangeRestaurant = 60.0f, + mealAtMcDonaldSOrEquivalent = 8.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 4.49f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.22f, + waterAThirdOfLiterBottleInRestaurants = 1.26f, + milkRegularOneLiter = 0.98f, + waterOneAndHalfLiterBottleAtTheMarket = 1.0f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 2.3f, + banana1kg = 0.99f, + oranges1kg = 2.2f, + tomato1kg = 1.1f, + potato1kg = 1.71f, + onion1kg = 1.62f, + lettuceOneHead = 1.83f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 3.04f, + riceWhite1kg = 2.2f, + eggsRegular12 = 1.69f, + localCheese1kg = 12.9f, + chickenFillets1kg = 16.17f, + beefRound1kgOrEquivalentBackLegRedMeat = 12.49f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 100.0f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.25f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 55.0f, + fitnessClubMonthlyFeeForOneAdult = 50.0f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 12.5f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 921.42f, + internationalPrimarySchoolYearlyForOneChild = 8950.0f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 41.67f, + oneSummerDressInAChainStoreZaraHAndM = 25.0f, + onePairOfNikeRunningShoesMidRange = 63.33f, + onePairOfMenLeatherBusinessShoes = 50.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 2.0f, + monthlyPassRegularPrice = 20.0f, + taxiStartNormalTariff = 3.0f, + taxi1kmNormalTariff = 1.86f, + taxi1hourWaitingNormalTariff = 15.0f, + gasolineOneLiter = 1.36f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 20000.0f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 22328.2f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = 1300.0f, + apartmentOneBedroomOutsideOfCentre = 1475.0f, + apartment3BedroomsInCityCentre = 2350.0f, + apartment3BedroomsOutsideOfCentre = 2625.0f, + pricePerSquareMeterToBuyApartmentInCityCentre = 1883.68f, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 1614.59f + ), + averageMonthlyNetSalaryAfterTax = 1200.0f, + dataQuality = false + ), + CityEntity( + cityName = "Moose Jaw", + country = "Canada", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 14.82f, + mealFor2PeopleMidRangeRestaurant = 55.59f, + mealAtMcDonaldSOrEquivalent = 8.89f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 3.29f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.16f, + waterAThirdOfLiterBottleInRestaurants = 1.65f, + milkRegularOneLiter = 1.48f, + waterOneAndHalfLiterBottleAtTheMarket = 1.98f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 3.15f, + banana1kg = 1.06f, + oranges1kg = 2.96f, + tomato1kg = 2.88f, + potato1kg = 1.91f, + onion1kg = 1.74f, + lettuceOneHead = 2.22f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 1.91f, + riceWhite1kg = 1.63f, + eggsRegular12 = 3.19f, + localCheese1kg = 10.28f, + chickenFillets1kg = 8.17f, + beefRound1kgOrEquivalentBackLegRedMeat = 10.93f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 154.9f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.19f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 54.66f, + fitnessClubMonthlyFeeForOneAdult = 55.59f, + tennisCourtRentOneHourOnWeekend = 48.17f, + cinemaInternationalReleaseOneSeat = 7.41f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 567.6f, + internationalPrimarySchoolYearlyForOneChild = 7893.24f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 29.65f, + oneSummerDressInAChainStoreZaraHAndM = 25.94f, + onePairOfNikeRunningShoesMidRange = 79.67f, + onePairOfMenLeatherBusinessShoes = 101.91f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 0.93f, + monthlyPassRegularPrice = 29.65f, + taxiStartNormalTariff = 2.59f, + taxi1kmNormalTariff = 0.56f, + taxi1hourWaitingNormalTariff = 22.23f, + gasolineOneLiter = 1.35f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 20752.19f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 20011.04f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = 1185.84f, + dataQuality = false + ), CityEntity( + cityName = "Chetumal", + country = "Mexico", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 12.56f, + mealFor2PeopleMidRangeRestaurant = 23.21f, + mealAtMcDonaldSOrEquivalent = 5.06f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 2.84f, + cokePepsiAThirdOfLiterBottleInRestaurants = 0.71f, + waterAThirdOfLiterBottleInRestaurants = 0.61f, + milkRegularOneLiter = 0.89f, + waterOneAndHalfLiterBottleAtTheMarket = 0.72f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 2.84f, + banana1kg = 1.03f, + oranges1kg = 1.37f, + tomato1kg = 1.55f, + potato1kg = 1.42f, + onion1kg = 1.03f, + lettuceOneHead = 0.93f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 1.55f, + riceWhite1kg = 1.16f, + eggsRegular12 = 1.5f, + localCheese1kg = 4.13f, + chickenFillets1kg = 4.38f, + beefRound1kgOrEquivalentBackLegRedMeat = null + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 99.25f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.26f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 27.21f, + fitnessClubMonthlyFeeForOneAdult = 18.05f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 3.09f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 61.88f, + internationalPrimarySchoolYearlyForOneChild = null + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 41.26f, + oneSummerDressInAChainStoreZaraHAndM = 36.1f, + onePairOfNikeRunningShoesMidRange = 77.35f, + onePairOfMenLeatherBusinessShoes = 51.57f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 0.57f, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 1.24f, + taxi1kmNormalTariff = 1.29f, + taxi1hourWaitingNormalTariff = 3.48f, + gasolineOneLiter = 1.11f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 21246.42f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 16759.92f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = 198.49f, + apartmentOneBedroomOutsideOfCentre = 126.98f, + apartment3BedroomsInCityCentre = 398.77f, + apartment3BedroomsOutsideOfCentre = 326.44f, + pricePerSquareMeterToBuyApartmentInCityCentre = 626.31f, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 309.41f + ), + averageMonthlyNetSalaryAfterTax = 257.84f, + dataQuality = false + ), + CityEntity( + cityName = "Kuysinjaq", + country = "Iraq", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 2.06f, + mealFor2PeopleMidRangeRestaurant = 10.96f, + mealAtMcDonaldSOrEquivalent = null + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 1.37f, + cokePepsiAThirdOfLiterBottleInRestaurants = 0.34f, + waterAThirdOfLiterBottleInRestaurants = 0.17f, + milkRegularOneLiter = 1.03f, + waterOneAndHalfLiterBottleAtTheMarket = 0.34f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 0.69f, + banana1kg = 1.03f, + oranges1kg = 1.03f, + tomato1kg = 0.51f, + potato1kg = 0.51f, + onion1kg = 0.51f, + lettuceOneHead = 0.34f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 0.69f, + riceWhite1kg = 1.03f, + eggsRegular12 = 1.37f, + localCheese1kg = 6.85f, + chickenFillets1kg = 3.43f, + beefRound1kgOrEquivalentBackLegRedMeat = 8.22f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = null, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.06f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 34.26f, + fitnessClubMonthlyFeeForOneAdult = 13.7f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 10.28f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 57.1f, + internationalPrimarySchoolYearlyForOneChild = 1027.75f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 13.7f, + oneSummerDressInAChainStoreZaraHAndM = 17.13f, + onePairOfNikeRunningShoesMidRange = null, + onePairOfMenLeatherBusinessShoes = 17.13f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 1.37f, + taxi1kmNormalTariff = 0.69f, + taxi1hourWaitingNormalTariff = 3.43f, + gasolineOneLiter = 0.62f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = null, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 16444.04f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = 137.03f, + apartmentOneBedroomOutsideOfCentre = 102.78f, + apartment3BedroomsInCityCentre = 205.55f, + apartment3BedroomsOutsideOfCentre = 171.29f, + pricePerSquareMeterToBuyApartmentInCityCentre = 342.58f, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 137.03f + ), + averageMonthlyNetSalaryAfterTax = 411.1f, + dataQuality = false + ) + ) + + val averageFruitAndVegetables = listOf( + CityEntity( + cityName = "Moncks Corner", + country = "United States", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 14.5f, + mealFor2PeopleMidRangeRestaurant = 40.0f, + mealAtMcDonaldSOrEquivalent = 7.5f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 4.33f, + cokePepsiAThirdOfLiterBottleInRestaurants = 1.0f, + waterAThirdOfLiterBottleInRestaurants = 1.0f, + milkRegularOneLiter = 0.91f, + waterOneAndHalfLiterBottleAtTheMarket = 1.75f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 0.1f, + banana1kg = 0.1f, + oranges1kg = 0.1f, + tomato1kg = 0.1f, + potato1kg = 0.1f, + onion1kg = 0.1f, + lettuceOneHead = 0.1f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 2.2f, + riceWhite1kg = 2.62f, + eggsRegular12 = 2.17f, + localCheese1kg = 11.02f, + chickenFillets1kg = 8.8f, + beefRound1kgOrEquivalentBackLegRedMeat = 15.76f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 144.92f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.0f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 67.78f, + fitnessClubMonthlyFeeForOneAdult = null, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 9.0f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 1500.0f, + internationalPrimarySchoolYearlyForOneChild = null + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 52.0f, + oneSummerDressInAChainStoreZaraHAndM = 46.33f, + onePairOfNikeRunningShoesMidRange = 94.67f, + onePairOfMenLeatherBusinessShoes = 90.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 2.1f, + taxi1kmNormalTariff = 1.49f, + taxi1hourWaitingNormalTariff = 15.0f, + gasolineOneLiter = 0.92f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = null, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 28500.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = Float.NaN, + dataQuality = false + ), + + + CityEntity( + cityName = "Keller", + country = "United States", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 30.0f, + mealFor2PeopleMidRangeRestaurant = 75.0f, + mealAtMcDonaldSOrEquivalent = 7.5f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 5.33f, + cokePepsiAThirdOfLiterBottleInRestaurants = 1.8f, + waterAThirdOfLiterBottleInRestaurants = 1.17f, + milkRegularOneLiter = 0.88f, + waterOneAndHalfLiterBottleAtTheMarket = 3.0f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 4.13f, + banana1kg = 1.33f, + oranges1kg = 5.75f, + tomato1kg = 6.03f, + potato1kg = 4.05f, + onion1kg = 3.36f, + lettuceOneHead = 1.59f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 2.84f, + riceWhite1kg = 3.98f, + eggsRegular12 = 3.0f, + localCheese1kg = 15.08f, + chickenFillets1kg = 7.61f, + beefRound1kgOrEquivalentBackLegRedMeat = 18.7f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 210.09f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = null, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 67.8f, + fitnessClubMonthlyFeeForOneAdult = 39.0f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 9.5f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 1125.0f, + internationalPrimarySchoolYearlyForOneChild = null + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 47.5f, + oneSummerDressInAChainStoreZaraHAndM = 26.0f, + onePairOfNikeRunningShoesMidRange = 92.5f, + onePairOfMenLeatherBusinessShoes = 200.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 3.12f, + taxi1kmNormalTariff = 1.12f, + taxi1hourWaitingNormalTariff = 18.0f, + gasolineOneLiter = 0.99f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 29880.0f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 20425.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = 1521.67f, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = 3200.0f, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = 13.5f, + dataQuality = false + ), + + + CityEntity( + cityName = "Malden", + country = "United States", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = null, + mealFor2PeopleMidRangeRestaurant = null, + mealAtMcDonaldSOrEquivalent = 7.5f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 4.5f, + cokePepsiAThirdOfLiterBottleInRestaurants = null, + waterAThirdOfLiterBottleInRestaurants = 2.0f, + milkRegularOneLiter = null, + waterOneAndHalfLiterBottleAtTheMarket = 1.33f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 4.92f, + banana1kg = 2.0f, + oranges1kg = 6.61f, + tomato1kg = 5.51f, + potato1kg = 5.51f, + onion1kg = 4.4f, + lettuceOneHead = 2.03f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = null, + riceWhite1kg = 6.17f, + eggsRegular12 = null, + localCheese1kg = 9.92f, + chickenFillets1kg = null, + beefRound1kgOrEquivalentBackLegRedMeat = null + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 221.47f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = null, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 67.8f, + fitnessClubMonthlyFeeForOneAdult = null, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 12.0f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = null, + internationalPrimarySchoolYearlyForOneChild = 5000.0f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 51.66f, + oneSummerDressInAChainStoreZaraHAndM = 50.0f, + onePairOfNikeRunningShoesMidRange = 69.99f, + onePairOfMenLeatherBusinessShoes = 104.67f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 2.5f, + monthlyPassRegularPrice = 84.0f, + taxiStartNormalTariff = null, + taxi1kmNormalTariff = null, + taxi1hourWaitingNormalTariff = null, + gasolineOneLiter = null + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = null, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 20000.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = 10763.91f, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 6458.35f + ), + averageMonthlyNetSalaryAfterTax = 14.9f, + dataQuality = false + ), + + + CityEntity( + cityName = "Pearl City", + country = "United States", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = null, + mealFor2PeopleMidRangeRestaurant = null, + mealAtMcDonaldSOrEquivalent = 10.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 5.25f, + cokePepsiAThirdOfLiterBottleInRestaurants = null, + waterAThirdOfLiterBottleInRestaurants = 1.44f, + milkRegularOneLiter = 2.38f, + waterOneAndHalfLiterBottleAtTheMarket = 2.08f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 5.91f, + banana1kg = 3.84f, + oranges1kg = 7.02f, + tomato1kg = 5.94f, + potato1kg = 4.95f, + onion1kg = 4.44f, + lettuceOneHead = 2.74f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 4.41f, + riceWhite1kg = 7.33f, + eggsRegular12 = null, + localCheese1kg = 12.13f, + chickenFillets1kg = null, + beefRound1kgOrEquivalentBackLegRedMeat = 26.46f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 251.16f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = null, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 68.12f, + fitnessClubMonthlyFeeForOneAdult = 60.0f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = null, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = null, + internationalPrimarySchoolYearlyForOneChild = null + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 47.55f, + oneSummerDressInAChainStoreZaraHAndM = 35.87f, + onePairOfNikeRunningShoesMidRange = 79.29f, + onePairOfMenLeatherBusinessShoes = null + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = null, + taxi1kmNormalTariff = null, + taxi1hourWaitingNormalTariff = null, + gasolineOneLiter = null + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = null, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 21105.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = 2000.0f, + apartmentOneBedroomOutsideOfCentre = 1750.0f, + apartment3BedroomsInCityCentre = 5000.0f, + apartment3BedroomsOutsideOfCentre = 4750.0f, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = 12.0f, + dataQuality = false + ), + + + CityEntity( + cityName = "Clayton", + country = "United States", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 10.0f, + mealFor2PeopleMidRangeRestaurant = 32.0f, + mealAtMcDonaldSOrEquivalent = 6.85f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 4.0f, + cokePepsiAThirdOfLiterBottleInRestaurants = null, + waterAThirdOfLiterBottleInRestaurants = 1.29f, + milkRegularOneLiter = 0.86f, + waterOneAndHalfLiterBottleAtTheMarket = 0.79f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 2.65f, + banana1kg = 1.34f, + oranges1kg = null, + tomato1kg = 2.43f, + potato1kg = null, + onion1kg = 1.94f, + lettuceOneHead = 1.5f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 2.48f, + riceWhite1kg = null, + eggsRegular12 = 2.4f, + localCheese1kg = null, + chickenFillets1kg = null, + beefRound1kgOrEquivalentBackLegRedMeat = 12.13f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 132.0f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = null, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 68.33f, + fitnessClubMonthlyFeeForOneAdult = null, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 11.25f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = null, + internationalPrimarySchoolYearlyForOneChild = null + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = null, + oneSummerDressInAChainStoreZaraHAndM = null, + onePairOfNikeRunningShoesMidRange = 70.0f, + onePairOfMenLeatherBusinessShoes = null + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = null, + taxi1kmNormalTariff = null, + taxi1hourWaitingNormalTariff = null, + gasolineOneLiter = 1.07f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = null, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 22000.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = 1300.0f, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 2690.98f + ), + averageMonthlyNetSalaryAfterTax = 500f, + dataQuality = false + ), + + + CityEntity( + cityName = "Brevard", + country = "United States", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 15.0f, + mealFor2PeopleMidRangeRestaurant = 45.0f, + mealAtMcDonaldSOrEquivalent = 7.75f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 4.79f, + cokePepsiAThirdOfLiterBottleInRestaurants = 1.5f, + waterAThirdOfLiterBottleInRestaurants = 1.79f, + milkRegularOneLiter = 2.07f, + waterOneAndHalfLiterBottleAtTheMarket = 1.92f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 3.72f, + banana1kg = 1.26f, + oranges1kg = 4.23f, + tomato1kg = 5.49f, + potato1kg = 4.35f, + onion1kg = 3.17f, + lettuceOneHead = 2.22f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 2.6f, + riceWhite1kg = 3.56f, + eggsRegular12 = 2.59f, + localCheese1kg = 14.7f, + chickenFillets1kg = 11.02f, + beefRound1kgOrEquivalentBackLegRedMeat = 13.0f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 118.5f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = null, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 68.33f, + fitnessClubMonthlyFeeForOneAdult = 60.0f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 10.69f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = null, + internationalPrimarySchoolYearlyForOneChild = null + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 54.5f, + oneSummerDressInAChainStoreZaraHAndM = 50.5f, + onePairOfNikeRunningShoesMidRange = 78.33f, + onePairOfMenLeatherBusinessShoes = 141.67f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = null, + taxi1kmNormalTariff = null, + taxi1hourWaitingNormalTariff = null, + gasolineOneLiter = 1.11f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = null, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 23750.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = 1300.0f, + apartmentOneBedroomOutsideOfCentre = 975.0f, + apartment3BedroomsInCityCentre = 1700.0f, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = 600f, + dataQuality = false + ), + + + CityEntity( + cityName = "Woodlawn", + country = "United States", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 11.0f, + mealFor2PeopleMidRangeRestaurant = 60.0f, + mealAtMcDonaldSOrEquivalent = 8.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 3.2f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.33f, + waterAThirdOfLiterBottleInRestaurants = 1.5f, + milkRegularOneLiter = 1.1f, + waterOneAndHalfLiterBottleAtTheMarket = 1.85f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 4.03f, + banana1kg = 1.57f, + oranges1kg = 4.65f, + tomato1kg = 3.64f, + potato1kg = 2.69f, + onion1kg = 2.2f, + lettuceOneHead = 1.73f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 1.74f, + riceWhite1kg = 3.38f, + eggsRegular12 = 1.79f, + localCheese1kg = 7.27f, + chickenFillets1kg = 4.39f, + beefRound1kgOrEquivalentBackLegRedMeat = 11.02f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 122.31f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.03f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 68.33f, + fitnessClubMonthlyFeeForOneAdult = null, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 13.25f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 800.0f, + internationalPrimarySchoolYearlyForOneChild = 5000.0f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 46.5f, + oneSummerDressInAChainStoreZaraHAndM = 26.25f, + onePairOfNikeRunningShoesMidRange = 59.6f, + onePairOfMenLeatherBusinessShoes = 76.67f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 2.0f, + taxi1kmNormalTariff = 1.23f, + taxi1hourWaitingNormalTariff = 20.0f, + gasolineOneLiter = 1.16f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 25500.0f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 23666.67f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = 1000f, + dataQuality = false + ), + + + CityEntity( + cityName = "Brookdale", + country = "United States", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = null, + mealFor2PeopleMidRangeRestaurant = 50.0f, + mealAtMcDonaldSOrEquivalent = 8.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 5.0f, + cokePepsiAThirdOfLiterBottleInRestaurants = null, + waterAThirdOfLiterBottleInRestaurants = 1.27f, + milkRegularOneLiter = null, + waterOneAndHalfLiterBottleAtTheMarket = 1.87f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 4.4f, + banana1kg = 1.97f, + oranges1kg = 2.85f, + tomato1kg = 2.58f, + potato1kg = 1.42f, + onion1kg = 1.96f, + lettuceOneHead = 1.5f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = null, + riceWhite1kg = 5.5f, + eggsRegular12 = null, + localCheese1kg = 12.0f, + chickenFillets1kg = null, + beefRound1kgOrEquivalentBackLegRedMeat = null + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 158.47f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = null, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 68.33f, + fitnessClubMonthlyFeeForOneAdult = null, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 11.75f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = null, + internationalPrimarySchoolYearlyForOneChild = null + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 45.0f, + oneSummerDressInAChainStoreZaraHAndM = 37.5f, + onePairOfNikeRunningShoesMidRange = 65.0f, + onePairOfMenLeatherBusinessShoes = 95.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = null, + taxi1kmNormalTariff = null, + taxi1hourWaitingNormalTariff = null, + gasolineOneLiter = null + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = null, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = null + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = 2690.98f, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 2690.98f + ), + averageMonthlyNetSalaryAfterTax = 1000f, + dataQuality = false + ), + + + CityEntity( + cityName = "Christiansburg", + country = "United States", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 13.0f, + mealFor2PeopleMidRangeRestaurant = 45.0f, + mealAtMcDonaldSOrEquivalent = 7.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 3.77f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.0f, + waterAThirdOfLiterBottleInRestaurants = 1.34f, + milkRegularOneLiter = 0.91f, + waterOneAndHalfLiterBottleAtTheMarket = 2.08f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 4.55f, + banana1kg = 2.7f, + oranges1kg = 4.62f, + tomato1kg = 3.04f, + potato1kg = 1.76f, + onion1kg = 2.89f, + lettuceOneHead = 1.65f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 3.64f, + riceWhite1kg = 4.09f, + eggsRegular12 = 2.5f, + localCheese1kg = 10.71f, + chickenFillets1kg = 11.76f, + beefRound1kgOrEquivalentBackLegRedMeat = 13.04f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 162.37f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.22f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 68.37f, + fitnessClubMonthlyFeeForOneAdult = 15.0f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 12.0f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = null, + internationalPrimarySchoolYearlyForOneChild = 35000.0f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 35.0f, + oneSummerDressInAChainStoreZaraHAndM = 31.99f, + onePairOfNikeRunningShoesMidRange = 71.25f, + onePairOfMenLeatherBusinessShoes = 120.71f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 1.75f, + monthlyPassRegularPrice = 28.0f, + taxiStartNormalTariff = 2.5f, + taxi1kmNormalTariff = 1.09f, + taxi1hourWaitingNormalTariff = null, + gasolineOneLiter = 1.15f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 23500.0f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 23000.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = 800.0f, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = 3000f, + dataQuality = false + ), + + + CityEntity( + cityName = "Kernersville", + country = "United States", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 15.0f, + mealFor2PeopleMidRangeRestaurant = 60.0f, + mealAtMcDonaldSOrEquivalent = 7.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 3.77f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.0f, + waterAThirdOfLiterBottleInRestaurants = 1.34f, + milkRegularOneLiter = 0.89f, + waterOneAndHalfLiterBottleAtTheMarket = 2.0f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 4.92f, + banana1kg = 1.63f, + oranges1kg = 4.62f, + tomato1kg = 3.95f, + potato1kg = 2.99f, + onion1kg = 2.78f, + lettuceOneHead = 1.5f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 2.99f, + riceWhite1kg = 4.09f, + eggsRegular12 = 2.5f, + localCheese1kg = 8.07f, + chickenFillets1kg = 11.76f, + beefRound1kgOrEquivalentBackLegRedMeat = 13.65f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 149.11f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.22f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 68.37f, + fitnessClubMonthlyFeeForOneAdult = null, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 12.0f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 975.0f, + internationalPrimarySchoolYearlyForOneChild = 15125.0f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 40.75f, + oneSummerDressInAChainStoreZaraHAndM = 31.99f, + onePairOfNikeRunningShoesMidRange = 71.25f, + onePairOfMenLeatherBusinessShoes = 91.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 2.5f, + taxi1kmNormalTariff = 1.09f, + taxi1hourWaitingNormalTariff = 30.0f, + gasolineOneLiter = 1.15f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 23500.0f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 23166.67f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = 23f, + dataQuality = false + ), + + + CityEntity( + cityName = "Airway Heights", + country = "United States", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 15.0f, + mealFor2PeopleMidRangeRestaurant = 77.5f, + mealAtMcDonaldSOrEquivalent = 10.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 5.17f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.86f, + waterAThirdOfLiterBottleInRestaurants = 2.0f, + milkRegularOneLiter = 0.79f, + waterOneAndHalfLiterBottleAtTheMarket = 1.7f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 4.86f, + banana1kg = 1.64f, + oranges1kg = 4.32f, + tomato1kg = 4.36f, + potato1kg = 2.17f, + onion1kg = 2.4f, + lettuceOneHead = 1.67f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 2.76f, + riceWhite1kg = 3.93f, + eggsRegular12 = 2.0f, + localCheese1kg = 12.61f, + chickenFillets1kg = 10.93f, + beefRound1kgOrEquivalentBackLegRedMeat = 13.21f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 225.31f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.06f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 68.4f, + fitnessClubMonthlyFeeForOneAdult = 65.0f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 13.0f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 300.0f, + internationalPrimarySchoolYearlyForOneChild = 19750.0f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 47.71f, + oneSummerDressInAChainStoreZaraHAndM = 36.67f, + onePairOfNikeRunningShoesMidRange = 86.86f, + onePairOfMenLeatherBusinessShoes = 94.57f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 3.0f, + monthlyPassRegularPrice = 60.0f, + taxiStartNormalTariff = 5.0f, + taxi1kmNormalTariff = 1.15f, + taxi1hourWaitingNormalTariff = 35.0f, + gasolineOneLiter = 1.27f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 18597.5f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 17300.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = 1300.0f, + apartmentOneBedroomOutsideOfCentre = 1300.0f, + apartment3BedroomsInCityCentre = 1800.0f, + apartment3BedroomsOutsideOfCentre = 1800.0f, + pricePerSquareMeterToBuyApartmentInCityCentre = 6070.85f, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 4886.82f + ), + averageMonthlyNetSalaryAfterTax = 13f, + dataQuality = false + ), + + + CityEntity( + cityName = "Vryheid", + country = "South Africa", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = null, + mealFor2PeopleMidRangeRestaurant = null, + mealAtMcDonaldSOrEquivalent = null + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = null, + cokePepsiAThirdOfLiterBottleInRestaurants = null, + waterAThirdOfLiterBottleInRestaurants = null, + milkRegularOneLiter = 1.94f, + waterOneAndHalfLiterBottleAtTheMarket = 1.03f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 1.14f, + banana1kg = 1.71f, + oranges1kg = 0.97f, + tomato1kg = 1.31f, + potato1kg = 0.91f, + onion1kg = 1.08f, + lettuceOneHead = 1.08f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 0.93f, + riceWhite1kg = 3.71f, + eggsRegular12 = 2.51f, + localCheese1kg = 8.05f, + chickenFillets1kg = 3.82f, + beefRound1kgOrEquivalentBackLegRedMeat = 5.7f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 114.05f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = null, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 68.43f, + fitnessClubMonthlyFeeForOneAdult = null, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = null, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 256.62f, + internationalPrimarySchoolYearlyForOneChild = 1140.54f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 56.97f, + oneSummerDressInAChainStoreZaraHAndM = 42.71f, + onePairOfNikeRunningShoesMidRange = 102.65f, + onePairOfMenLeatherBusinessShoes = 116.28f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 0.6f, + taxi1kmNormalTariff = null, + taxi1hourWaitingNormalTariff = 3.99f, + gasolineOneLiter = 1.49f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 17672.6f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 23586.27f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = 324f, + dataQuality = false + ), + + + CityEntity( + cityName = "Mortsel", + country = "Belgium", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 23.18f, + mealFor2PeopleMidRangeRestaurant = 73.76f, + mealAtMcDonaldSOrEquivalent = 11.85f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 2.74f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.11f, + waterAThirdOfLiterBottleInRestaurants = 2.46f, + milkRegularOneLiter = 0.83f, + waterOneAndHalfLiterBottleAtTheMarket = 0.46f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 2.02f, + banana1kg = 1.55f, + oranges1kg = 1.48f, + tomato1kg = 2.51f, + potato1kg = 0.95f, + onion1kg = 1.58f, + lettuceOneHead = 0.95f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 1.88f, + riceWhite1kg = 1.48f, + eggsRegular12 = 2.25f, + localCheese1kg = 10.71f, + chickenFillets1kg = 7.38f, + beefRound1kgOrEquivalentBackLegRedMeat = 14.01f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 180.01f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.26f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 68.49f, + fitnessClubMonthlyFeeForOneAdult = 31.6f, + tennisCourtRentOneHourOnWeekend = 15.81f, + cinemaInternationalReleaseOneSeat = 13.01f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 1580.62f, + internationalPrimarySchoolYearlyForOneChild = 13171.82f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 79.03f, + oneSummerDressInAChainStoreZaraHAndM = 36.88f, + onePairOfNikeRunningShoesMidRange = 94.84f, + onePairOfMenLeatherBusinessShoes = 105.37f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 2.63f, + monthlyPassRegularPrice = 51.63f, + taxiStartNormalTariff = 5.27f, + taxi1kmNormalTariff = 2.37f, + taxi1hourWaitingNormalTariff = 31.61f, + gasolineOneLiter = 2.08f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 15279.31f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 15279.31f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = 790.31f, + apartmentOneBedroomOutsideOfCentre = 737.62f, + apartment3BedroomsInCityCentre = 1475.24f, + apartment3BedroomsOutsideOfCentre = 1159.12f, + pricePerSquareMeterToBuyApartmentInCityCentre = 2528.99f, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 2212.86f + ), + averageMonthlyNetSalaryAfterTax = 31f, + dataQuality = false + ), + + + CityEntity( + cityName = "Ridgecrest", + country = "United States", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 20.0f, + mealFor2PeopleMidRangeRestaurant = 40.0f, + mealAtMcDonaldSOrEquivalent = 8.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 4.67f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.67f, + waterAThirdOfLiterBottleInRestaurants = 1.47f, + milkRegularOneLiter = 1.11f, + waterOneAndHalfLiterBottleAtTheMarket = 1.5f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 5.0f, + banana1kg = 1.8f, + oranges1kg = 4.29f, + tomato1kg = 5.68f, + potato1kg = 2.64f, + onion1kg = 2.16f, + lettuceOneHead = 1.81f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 3.37f, + riceWhite1kg = 4.41f, + eggsRegular12 = 3.22f, + localCheese1kg = 6.61f, + chickenFillets1kg = 10.28f, + beefRound1kgOrEquivalentBackLegRedMeat = 15.98f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 157.63f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.26f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 68.6f, + fitnessClubMonthlyFeeForOneAdult = 30.0f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 18.0f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 1466.67f, + internationalPrimarySchoolYearlyForOneChild = 27500.0f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 51.85f, + oneSummerDressInAChainStoreZaraHAndM = 33.33f, + onePairOfNikeRunningShoesMidRange = 87.5f, + onePairOfMenLeatherBusinessShoes = 134.29f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 3.5f, + taxi1kmNormalTariff = 1.71f, + taxi1hourWaitingNormalTariff = 65.0f, + gasolineOneLiter = 1.68f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 23292.0f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 22741.5f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = 1000.0f, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = 14f, + dataQuality = false + ) + + ) + + val fashionShopping = listOf( + CityEntity( + cityName = "Santiago de Cuba", + country = "Cuba", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 6.5f, + mealFor2PeopleMidRangeRestaurant = 15.0f, + mealAtMcDonaldSOrEquivalent = 5.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 2.0f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.0f, + waterAThirdOfLiterBottleInRestaurants = 1.0f, + milkRegularOneLiter = 3.8f, + waterOneAndHalfLiterBottleAtTheMarket = 2.0f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 11.02f, + banana1kg = 0.44f, + oranges1kg = 1.1f, + tomato1kg = 0.88f, + potato1kg = 1.1f, + onion1kg = 2.2f, + lettuceOneHead = 0.25f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 1.1f, + riceWhite1kg = 1.1f, + eggsRegular12 = 2.03f, + localCheese1kg = 9.0f, + chickenFillets1kg = 6.61f, + beefRound1kgOrEquivalentBackLegRedMeat = 6.61f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = null, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.1f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = null, + fitnessClubMonthlyFeeForOneAdult = null, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 1.0f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = null, + internationalPrimarySchoolYearlyForOneChild = null + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 40.0f, + oneSummerDressInAChainStoreZaraHAndM = 40.0f, + onePairOfNikeRunningShoesMidRange = 60.0f, + onePairOfMenLeatherBusinessShoes = 50.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = null, + taxi1kmNormalTariff = 0.7f, + taxi1hourWaitingNormalTariff = null, + gasolineOneLiter = null + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = null, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = null + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = 600.0f, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = 18f, + dataQuality = false + ), + CityEntity( + cityName = "Sancti Spiritus", + country = "Cuba", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 7.0f, + mealFor2PeopleMidRangeRestaurant = 25.0f, + mealAtMcDonaldSOrEquivalent = 5.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = null, + cokePepsiAThirdOfLiterBottleInRestaurants = 1.0f, + waterAThirdOfLiterBottleInRestaurants = 0.75f, + milkRegularOneLiter = null, + waterOneAndHalfLiterBottleAtTheMarket = 1.0f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 3.0f, + banana1kg = 0.5f, + oranges1kg = 0.5f, + tomato1kg = 1.0f, + potato1kg = 2.0f, + onion1kg = 2.0f, + lettuceOneHead = null + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = null, + riceWhite1kg = 1.0f, + eggsRegular12 = 2.4f, + localCheese1kg = 4.0f, + chickenFillets1kg = 5.0f, + beefRound1kgOrEquivalentBackLegRedMeat = 10.0f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 30.0f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = null, + internet60MbpsOrMoreUnlimitedDataCableAdsl = null, + fitnessClubMonthlyFeeForOneAdult = null, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = null, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = null, + internationalPrimarySchoolYearlyForOneChild = null + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 25.0f, + oneSummerDressInAChainStoreZaraHAndM = 15.0f, + onePairOfNikeRunningShoesMidRange = 40.0f, + onePairOfMenLeatherBusinessShoes = 30.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 1.0f, + taxi1kmNormalTariff = 1.0f, + taxi1hourWaitingNormalTariff = null, + gasolineOneLiter = 2.0f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 50000.0f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 70000.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = 20.0f, + dataQuality = false + ), + CityEntity( + cityName = "Santa Clara", + country = "Cuba", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 10.0f, + mealFor2PeopleMidRangeRestaurant = 30.0f, + mealAtMcDonaldSOrEquivalent = 5.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 1.91f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.0f, + waterAThirdOfLiterBottleInRestaurants = 0.5f, + milkRegularOneLiter = 3.52f, + waterOneAndHalfLiterBottleAtTheMarket = 0.98f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 6.24f, + banana1kg = null, + oranges1kg = 1.12f, + tomato1kg = 1.0f, + potato1kg = 1.82f, + onion1kg = 2.0f, + lettuceOneHead = 0.86f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 1.0f, + riceWhite1kg = 1.0f, + eggsRegular12 = 1.64f, + localCheese1kg = 4.0f, + chickenFillets1kg = 6.07f, + beefRound1kgOrEquivalentBackLegRedMeat = 10.0f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 11.5f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.26f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 80.0f, + fitnessClubMonthlyFeeForOneAdult = 6.0f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 1.12f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 70.0f, + internationalPrimarySchoolYearlyForOneChild = 15166.67f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 55.5f, + oneSummerDressInAChainStoreZaraHAndM = 44.33f, + onePairOfNikeRunningShoesMidRange = 79.17f, + onePairOfMenLeatherBusinessShoes = 78.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 0.5f, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 1.0f, + taxi1kmNormalTariff = 0.5f, + taxi1hourWaitingNormalTariff = 15.0f, + gasolineOneLiter = 1.14f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 80000.0f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 81500.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = 25.0f, + dataQuality = false + ) + ) + val bananaCheapest = listOf( + CityEntity( + cityName = "Santiago de Cuba", + country = "Cuba", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 6.5f, + mealFor2PeopleMidRangeRestaurant = 15.0f, + mealAtMcDonaldSOrEquivalent = 5.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 2.0f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.0f, + waterAThirdOfLiterBottleInRestaurants = 1.0f, + milkRegularOneLiter = 3.8f, + waterOneAndHalfLiterBottleAtTheMarket = 2.0f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 11.02f, + banana1kg = 0.44f, + oranges1kg = 1.1f, + tomato1kg = 0.88f, + potato1kg = 1.1f, + onion1kg = 2.2f, + lettuceOneHead = 0.25f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 1.1f, + riceWhite1kg = 1.1f, + eggsRegular12 = 2.03f, + localCheese1kg = 9.0f, + chickenFillets1kg = 6.61f, + beefRound1kgOrEquivalentBackLegRedMeat = 6.61f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = null, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.1f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = null, + fitnessClubMonthlyFeeForOneAdult = null, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 1.0f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = null, + internationalPrimarySchoolYearlyForOneChild = null + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 40.0f, + oneSummerDressInAChainStoreZaraHAndM = 40.0f, + onePairOfNikeRunningShoesMidRange = 60.0f, + onePairOfMenLeatherBusinessShoes = 50.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = null, + taxi1kmNormalTariff = 0.7f, + taxi1hourWaitingNormalTariff = null, + gasolineOneLiter = null + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = null, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = null + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = 600.0f, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = 18f, + dataQuality = false + ), + CityEntity( + cityName = "Sancti Spiritus", + country = "Cuba", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 7.0f, + mealFor2PeopleMidRangeRestaurant = 25.0f, + mealAtMcDonaldSOrEquivalent = 5.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = null, + cokePepsiAThirdOfLiterBottleInRestaurants = 1.0f, + waterAThirdOfLiterBottleInRestaurants = 0.75f, + milkRegularOneLiter = null, + waterOneAndHalfLiterBottleAtTheMarket = 1.0f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 3.0f, + banana1kg = 0.5f, + oranges1kg = 0.5f, + tomato1kg = 1.0f, + potato1kg = 2.0f, + onion1kg = 2.0f, + lettuceOneHead = null + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = null, + riceWhite1kg = 1.0f, + eggsRegular12 = 2.4f, + localCheese1kg = 4.0f, + chickenFillets1kg = 5.0f, + beefRound1kgOrEquivalentBackLegRedMeat = 10.0f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 30.0f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = null, + internet60MbpsOrMoreUnlimitedDataCableAdsl = null, + fitnessClubMonthlyFeeForOneAdult = null, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = null, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = null, + internationalPrimarySchoolYearlyForOneChild = null + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 25.0f, + oneSummerDressInAChainStoreZaraHAndM = 15.0f, + onePairOfNikeRunningShoesMidRange = 40.0f, + onePairOfMenLeatherBusinessShoes = 30.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 1.0f, + taxi1kmNormalTariff = 1.0f, + taxi1hourWaitingNormalTariff = null, + gasolineOneLiter = 2.0f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 50000.0f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 70000.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = 20.0f, + dataQuality = false + ), + CityEntity( + cityName = "Santa Clara", + country = "Cuba", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 10.0f, + mealFor2PeopleMidRangeRestaurant = 30.0f, + mealAtMcDonaldSOrEquivalent = 5.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 1.91f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.0f, + waterAThirdOfLiterBottleInRestaurants = 0.5f, + milkRegularOneLiter = 3.52f, + waterOneAndHalfLiterBottleAtTheMarket = 0.98f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 6.24f, + banana1kg = null, + oranges1kg = 1.12f, + tomato1kg = 1.0f, + potato1kg = 1.82f, + onion1kg = 2.0f, + lettuceOneHead = 0.86f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 1.0f, + riceWhite1kg = 1.0f, + eggsRegular12 = 1.64f, + localCheese1kg = 4.0f, + chickenFillets1kg = 6.07f, + beefRound1kgOrEquivalentBackLegRedMeat = 10.0f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 11.5f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.26f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 80.0f, + fitnessClubMonthlyFeeForOneAdult = 6.0f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 1.12f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 70.0f, + internationalPrimarySchoolYearlyForOneChild = 15166.67f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 55.5f, + oneSummerDressInAChainStoreZaraHAndM = 44.33f, + onePairOfNikeRunningShoesMidRange = 79.17f, + onePairOfMenLeatherBusinessShoes = 78.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 0.5f, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 1.0f, + taxi1kmNormalTariff = 0.5f, + taxi1hourWaitingNormalTariff = 15.0f, + gasolineOneLiter = 1.14f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 80000.0f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 81500.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = 25.0f, + dataQuality = false + ) + ) + + val costlierCity = listOf( + CityEntity( + cityName = "Santiago de Cuba", + country = "Cuba", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 6.5f, + mealFor2PeopleMidRangeRestaurant = 15.0f, + mealAtMcDonaldSOrEquivalent = 5.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 2.0f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.0f, + waterAThirdOfLiterBottleInRestaurants = 1.0f, + milkRegularOneLiter = 3.8f, + waterOneAndHalfLiterBottleAtTheMarket = 2.0f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 11.02f, + banana1kg = 0.44f, + oranges1kg = 1.1f, + tomato1kg = 0.88f, + potato1kg = 1.1f, + onion1kg = 2.2f, + lettuceOneHead = 0.25f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 1.1f, + riceWhite1kg = 1.1f, + eggsRegular12 = 2.03f, + localCheese1kg = 9.0f, + chickenFillets1kg = 6.61f, + beefRound1kgOrEquivalentBackLegRedMeat = 6.61f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = null, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.1f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = null, + fitnessClubMonthlyFeeForOneAdult = null, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 1.0f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = null, + internationalPrimarySchoolYearlyForOneChild = null + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 40.0f, + oneSummerDressInAChainStoreZaraHAndM = 40.0f, + onePairOfNikeRunningShoesMidRange = 60.0f, + onePairOfMenLeatherBusinessShoes = 50.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = null, + taxi1kmNormalTariff = 0.7f, + taxi1hourWaitingNormalTariff = null, + gasolineOneLiter = null + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = null, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = null + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = 200.0f, + apartmentOneBedroomOutsideOfCentre = 100.0f, + apartment3BedroomsInCityCentre = 600.0f, + apartment3BedroomsOutsideOfCentre = 100f, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = 18f, + dataQuality = true + ), + CityEntity( + cityName = "Sancti Spiritus", + country = "Cuba", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 7.0f, + mealFor2PeopleMidRangeRestaurant = 25.0f, + mealAtMcDonaldSOrEquivalent = 5.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = null, + cokePepsiAThirdOfLiterBottleInRestaurants = 1.0f, + waterAThirdOfLiterBottleInRestaurants = 0.75f, + milkRegularOneLiter = null, + waterOneAndHalfLiterBottleAtTheMarket = 1.0f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 3.0f, + banana1kg = 0.5f, + oranges1kg = 0.5f, + tomato1kg = 1.0f, + potato1kg = 2.0f, + onion1kg = 2.0f, + lettuceOneHead = null + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = null, + riceWhite1kg = 1.0f, + eggsRegular12 = 2.4f, + localCheese1kg = 4.0f, + chickenFillets1kg = 5.0f, + beefRound1kgOrEquivalentBackLegRedMeat = 10.0f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 30.0f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = null, + internet60MbpsOrMoreUnlimitedDataCableAdsl = null, + fitnessClubMonthlyFeeForOneAdult = null, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = null, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = null, + internationalPrimarySchoolYearlyForOneChild = null + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 25.0f, + oneSummerDressInAChainStoreZaraHAndM = 15.0f, + onePairOfNikeRunningShoesMidRange = 40.0f, + onePairOfMenLeatherBusinessShoes = 30.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 1.0f, + taxi1kmNormalTariff = 1.0f, + taxi1hourWaitingNormalTariff = null, + gasolineOneLiter = 2.0f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 50000.0f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 70000.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = 300.0f, + apartmentOneBedroomOutsideOfCentre = 180.0f, + apartment3BedroomsInCityCentre = 800.0f, + apartment3BedroomsOutsideOfCentre = 550.0f, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = 20.0f, + dataQuality = true + ), + CityEntity( + cityName = "Santa Clara", + country = "Cuba", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 10.0f, + mealFor2PeopleMidRangeRestaurant = 30.0f, + mealAtMcDonaldSOrEquivalent = 5.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 1.91f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.0f, + waterAThirdOfLiterBottleInRestaurants = 0.5f, + milkRegularOneLiter = 3.52f, + waterOneAndHalfLiterBottleAtTheMarket = 0.98f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 6.24f, + banana1kg = null, + oranges1kg = 1.12f, + tomato1kg = 1.0f, + potato1kg = 1.82f, + onion1kg = 2.0f, + lettuceOneHead = 0.86f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 1.0f, + riceWhite1kg = 1.0f, + eggsRegular12 = 1.64f, + localCheese1kg = 4.0f, + chickenFillets1kg = 6.07f, + beefRound1kgOrEquivalentBackLegRedMeat = 10.0f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 11.5f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.26f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 80.0f, + fitnessClubMonthlyFeeForOneAdult = 6.0f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 1.12f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 70.0f, + internationalPrimarySchoolYearlyForOneChild = 15166.67f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 55.5f, + oneSummerDressInAChainStoreZaraHAndM = 44.33f, + onePairOfNikeRunningShoesMidRange = 79.17f, + onePairOfMenLeatherBusinessShoes = 78.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 0.5f, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 1.0f, + taxi1kmNormalTariff = 0.5f, + taxi1hourWaitingNormalTariff = 15.0f, + gasolineOneLiter = 1.14f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 80000.0f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 81500.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = 1000.0f, + apartmentOneBedroomOutsideOfCentre = 970.0f, + apartment3BedroomsInCityCentre = 2567.0f, + apartment3BedroomsOutsideOfCentre = 999.0f, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = 25.0f, + dataQuality = true + ), + CityEntity( + cityName = "Masin", + country = "Iraq", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 6.5f, + mealFor2PeopleMidRangeRestaurant = 15.0f, + mealAtMcDonaldSOrEquivalent = 5.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 2.0f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.0f, + waterAThirdOfLiterBottleInRestaurants = 1.0f, + milkRegularOneLiter = 3.8f, + waterOneAndHalfLiterBottleAtTheMarket = 2.0f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 11.02f, + banana1kg = 0.44f, + oranges1kg = 1.1f, + tomato1kg = 0.88f, + potato1kg = 1.1f, + onion1kg = 2.2f, + lettuceOneHead = 0.25f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 1.1f, + riceWhite1kg = 1.1f, + eggsRegular12 = 2.03f, + localCheese1kg = 9.0f, + chickenFillets1kg = 6.61f, + beefRound1kgOrEquivalentBackLegRedMeat = 6.61f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = null, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.1f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = null, + fitnessClubMonthlyFeeForOneAdult = null, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 1.0f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = null, + internationalPrimarySchoolYearlyForOneChild = null + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 40.0f, + oneSummerDressInAChainStoreZaraHAndM = 40.0f, + onePairOfNikeRunningShoesMidRange = 60.0f, + onePairOfMenLeatherBusinessShoes = 50.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = null, + taxi1kmNormalTariff = 0.7f, + taxi1hourWaitingNormalTariff = null, + gasolineOneLiter = null + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = null, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = null + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = 6000.0f, + apartmentOneBedroomOutsideOfCentre = 100.0f, + apartment3BedroomsInCityCentre = 600.0f, + apartment3BedroomsOutsideOfCentre = 100f, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = 18f, + dataQuality = false + ), + CityEntity( + cityName = "Seoul", + country = "Korean", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 6.5f, + mealFor2PeopleMidRangeRestaurant = 15.0f, + mealAtMcDonaldSOrEquivalent = 5.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 2.0f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.0f, + waterAThirdOfLiterBottleInRestaurants = 1.0f, + milkRegularOneLiter = 3.8f, + waterOneAndHalfLiterBottleAtTheMarket = 2.0f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 11.02f, + banana1kg = 0.44f, + oranges1kg = 1.1f, + tomato1kg = 0.88f, + potato1kg = 1.1f, + onion1kg = 2.2f, + lettuceOneHead = 0.25f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 1.1f, + riceWhite1kg = 1.1f, + eggsRegular12 = 2.03f, + localCheese1kg = 9.0f, + chickenFillets1kg = 6.61f, + beefRound1kgOrEquivalentBackLegRedMeat = 6.61f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = null, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.1f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = null, + fitnessClubMonthlyFeeForOneAdult = null, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 1.0f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = null, + internationalPrimarySchoolYearlyForOneChild = null + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 40.0f, + oneSummerDressInAChainStoreZaraHAndM = 40.0f, + onePairOfNikeRunningShoesMidRange = 60.0f, + onePairOfMenLeatherBusinessShoes = 50.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = null, + taxi1kmNormalTariff = 0.7f, + taxi1hourWaitingNormalTariff = null, + gasolineOneLiter = null + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = null, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = null + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = 7000.0f, + apartment3BedroomsOutsideOfCentre = 100f, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = 18f, + dataQuality = true + ), + ) + + val cheapestInternet = listOf( + CityEntity( + cityName = "Santiago de Cuba", + country = "Cuba", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 6.5f, + mealFor2PeopleMidRangeRestaurant = 15.0f, + mealAtMcDonaldSOrEquivalent = 5.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 2.0f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.0f, + waterAThirdOfLiterBottleInRestaurants = 1.0f, + milkRegularOneLiter = 3.8f, + waterOneAndHalfLiterBottleAtTheMarket = 2.0f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 11.02f, + banana1kg = 0.44f, + oranges1kg = 1.1f, + tomato1kg = 0.88f, + potato1kg = 1.1f, + onion1kg = 2.2f, + lettuceOneHead = 0.25f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 1.1f, + riceWhite1kg = 1.1f, + eggsRegular12 = 2.03f, + localCheese1kg = 9.0f, + chickenFillets1kg = 6.61f, + beefRound1kgOrEquivalentBackLegRedMeat = 6.61f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = null, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.1f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = null, + fitnessClubMonthlyFeeForOneAdult = null, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 1.0f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = null, + internationalPrimarySchoolYearlyForOneChild = null + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 40.0f, + oneSummerDressInAChainStoreZaraHAndM = 40.0f, + onePairOfNikeRunningShoesMidRange = 60.0f, + onePairOfMenLeatherBusinessShoes = 50.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = null, + taxi1kmNormalTariff = 0.7f, + taxi1hourWaitingNormalTariff = null, + gasolineOneLiter = null + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = null, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = null + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = 600.0f, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = null, + dataQuality = false + ), + CityEntity( + cityName = "Sancti Spiritus", + country = "Cuba", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 7.0f, + mealFor2PeopleMidRangeRestaurant = 25.0f, + mealAtMcDonaldSOrEquivalent = 5.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = null, + cokePepsiAThirdOfLiterBottleInRestaurants = 1.0f, + waterAThirdOfLiterBottleInRestaurants = 0.75f, + milkRegularOneLiter = null, + waterOneAndHalfLiterBottleAtTheMarket = 1.0f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 3.0f, + banana1kg = 0.5f, + oranges1kg = 0.5f, + tomato1kg = 1.0f, + potato1kg = 2.0f, + onion1kg = 2.0f, + lettuceOneHead = null + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = null, + riceWhite1kg = 1.0f, + eggsRegular12 = 2.4f, + localCheese1kg = 4.0f, + chickenFillets1kg = 5.0f, + beefRound1kgOrEquivalentBackLegRedMeat = 10.0f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 30.0f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = null, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 15.0f, + fitnessClubMonthlyFeeForOneAdult = null, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = null, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = null, + internationalPrimarySchoolYearlyForOneChild = null + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 25.0f, + oneSummerDressInAChainStoreZaraHAndM = 15.0f, + onePairOfNikeRunningShoesMidRange = 40.0f, + onePairOfMenLeatherBusinessShoes = 30.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 1.0f, + taxi1kmNormalTariff = 1.0f, + taxi1hourWaitingNormalTariff = null, + gasolineOneLiter = 2.0f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 50000.0f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 70000.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = 20.0f, + dataQuality = false + ), + CityEntity( + cityName = "Santa Clara", + country = "Cuba", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 10.0f, + mealFor2PeopleMidRangeRestaurant = 30.0f, + mealAtMcDonaldSOrEquivalent = 5.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 1.91f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.0f, + waterAThirdOfLiterBottleInRestaurants = 0.5f, + milkRegularOneLiter = 3.52f, + waterOneAndHalfLiterBottleAtTheMarket = 0.98f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 6.24f, + banana1kg = null, + oranges1kg = 1.12f, + tomato1kg = 1.0f, + potato1kg = 1.82f, + onion1kg = 2.0f, + lettuceOneHead = 0.86f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 1.0f, + riceWhite1kg = 1.0f, + eggsRegular12 = 1.64f, + localCheese1kg = 4.0f, + chickenFillets1kg = 6.07f, + beefRound1kgOrEquivalentBackLegRedMeat = 10.0f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 11.5f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.26f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 80.0f, + fitnessClubMonthlyFeeForOneAdult = 6.0f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 1.12f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 70.0f, + internationalPrimarySchoolYearlyForOneChild = 15166.67f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 55.5f, + oneSummerDressInAChainStoreZaraHAndM = 44.33f, + onePairOfNikeRunningShoesMidRange = 79.17f, + onePairOfMenLeatherBusinessShoes = 78.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 0.5f, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 1.0f, + taxi1kmNormalTariff = 0.5f, + taxi1hourWaitingNormalTariff = 15.0f, + gasolineOneLiter = 1.14f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 80000.0f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 81500.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = 120.0f, + dataQuality = false + ), + CityEntity( + cityName = "Damanhur", + country = "Egypt", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 3.05f, + mealFor2PeopleMidRangeRestaurant = 23.4f, + mealAtMcDonaldSOrEquivalent = 4.07f, + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 1.19f, + cokePepsiAThirdOfLiterBottleInRestaurants = 0.35f, + waterAThirdOfLiterBottleInRestaurants = 0.2f, + milkRegularOneLiter = 0.51f, + waterOneAndHalfLiterBottleAtTheMarket = 0.27f, + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 0.79f, + banana1kg = 0.61f, + oranges1kg = 0.41f, + tomato1kg = 0.24f, + potato1kg = 0.27f, + onion1kg = 0.18f, + lettuceOneHead = 0.09f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 0.54f, + riceWhite1kg = 0.52f, + eggsRegular12 = 0.98f, + localCheese1kg = 1.42f, + chickenFillets1kg = 2.92f, + beefRound1kgOrEquivalentBackLegRedMeat = 7.33f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 47.48f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.02f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 12.21f, + fitnessClubMonthlyFeeForOneAdult = 16.28f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 3.26f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 40.7f, + internationalPrimarySchoolYearlyForOneChild = 915.7f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 12.21f, + oneSummerDressInAChainStoreZaraHAndM = 10.17f, + onePairOfNikeRunningShoesMidRange = 122.09f, + onePairOfMenLeatherBusinessShoes = 24.42f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 0.08f, + monthlyPassRegularPrice = 8.14f, + taxiStartNormalTariff = 0.35f, + taxi1kmNormalTariff = 0.16f, + taxi1hourWaitingNormalTariff = 1.63f, + gasolineOneLiter = 0.36f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 15261.71f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 17296.61f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = 1017.45f, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 203.49f + ), + averageMonthlyNetSalaryAfterTax = 81.4f, + dataQuality = true + ), + CityEntity( + cityName = "cairo", + country = "Egypt", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 5.05f, + mealFor2PeopleMidRangeRestaurant = 23.4f, + mealAtMcDonaldSOrEquivalent = 6.07f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 7.19f, + cokePepsiAThirdOfLiterBottleInRestaurants = 8.35f, + waterAThirdOfLiterBottleInRestaurants = 0.2f, + milkRegularOneLiter = 0.51f, + waterOneAndHalfLiterBottleAtTheMarket = 0.27f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 0.79f, + banana1kg = 0.61f, + oranges1kg = 0.41f, + tomato1kg = 0.24f, + potato1kg = 0.27f, + onion1kg = 0.18f, + lettuceOneHead = 0.09f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 0.54f, + riceWhite1kg = 0.52f, + eggsRegular12 = 0.98f, + localCheese1kg = 1.42f, + chickenFillets1kg = 2.92f, + beefRound1kgOrEquivalentBackLegRedMeat = 7.33f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 47.48f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.02f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 52.21f, + fitnessClubMonthlyFeeForOneAdult = 16.28f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 3.26f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 40.7f, + internationalPrimarySchoolYearlyForOneChild = 915.7f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 12.21f, + oneSummerDressInAChainStoreZaraHAndM = 10.17f, + onePairOfNikeRunningShoesMidRange = 122.09f, + onePairOfMenLeatherBusinessShoes = 24.42f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 0.08f, + monthlyPassRegularPrice = 8.14f, + taxiStartNormalTariff = 0.35f, + taxi1kmNormalTariff = 0.16f, + taxi1hourWaitingNormalTariff = 1.63f, + gasolineOneLiter = 0.36f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 15261.71f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 17296.61f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = 1017.45f, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 203.49f + ), + averageMonthlyNetSalaryAfterTax = 81.4f, + dataQuality = true + ), + CityEntity( + cityName = "Dushanbe", + country = "Tajikistan", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 3.97f, + mealFor2PeopleMidRangeRestaurant = 11.0f, + mealAtMcDonaldSOrEquivalent = 4.96f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 1.2f, + cokePepsiAThirdOfLiterBottleInRestaurants = 0.41f, + waterAThirdOfLiterBottleInRestaurants = 0.28f, + milkRegularOneLiter = 0.72f, + waterOneAndHalfLiterBottleAtTheMarket = 0.43f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 1.15f, + banana1kg = 2.24f, + oranges1kg = 2.3f, + tomato1kg = 1.19f, + potato1kg = 0.44f, + onion1kg = 0.31f, + lettuceOneHead = 0.42f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 0.41f, + riceWhite1kg = 1.58f, + eggsRegular12 = 1.56f, + localCheese1kg = 5.77f, + chickenFillets1kg = 3.9f, + beefRound1kgOrEquivalentBackLegRedMeat = 6.84f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 31.26f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.02f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 22.17f, + fitnessClubMonthlyFeeForOneAdult = 34.86f, + tennisCourtRentOneHourOnWeekend = 11.17f, + cinemaInternationalReleaseOneSeat = 5.21f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 84.39f, + internationalPrimarySchoolYearlyForOneChild = 4964.41f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 32.26f, + oneSummerDressInAChainStoreZaraHAndM = 24.07f, + onePairOfNikeRunningShoesMidRange = 53.36f, + onePairOfMenLeatherBusinessShoes = 52.12f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 0.25f, + monthlyPassRegularPrice = 6.95f, + taxiStartNormalTariff = 0.99f, + taxi1kmNormalTariff = 0.3f, + taxi1hourWaitingNormalTariff = 2.38f, + gasolineOneLiter = 0.94f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 14392.29f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 21839.84f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = 376.03f, + apartmentOneBedroomOutsideOfCentre = 186.15f, + apartment3BedroomsInCityCentre = 631.14f, + apartment3BedroomsOutsideOfCentre = 330.47f, + pricePerSquareMeterToBuyApartmentInCityCentre = 835.59f, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 381.24f + ), + averageMonthlyNetSalaryAfterTax = 163.81f, + dataQuality = true + ), + CityEntity( + cityName = "Vila Real de Santo Antonio", + country = "Portugal", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 10.54f, + mealFor2PeopleMidRangeRestaurant = 52.69f, + mealAtMcDonaldSOrEquivalent = 7.11f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 1.3f, + cokePepsiAThirdOfLiterBottleInRestaurants = 1.48f, + waterAThirdOfLiterBottleInRestaurants = 1.06f, + milkRegularOneLiter = 0.79f, + waterOneAndHalfLiterBottleAtTheMarket = 0.53f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 1.44f, + banana1kg = 1.07f, + oranges1kg = 1.36f, + tomato1kg = 1.92f, + potato1kg = 1.05f, + onion1kg = 0.93f, + lettuceOneHead = 0.95f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 1.35f, + riceWhite1kg = 1.1f, + eggsRegular12 = 1.93f, + localCheese1kg = 11.24f, + chickenFillets1kg = 6.4f, + beefRound1kgOrEquivalentBackLegRedMeat = 10.89f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 106.81f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.04f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 33.72f, + fitnessClubMonthlyFeeForOneAdult = null, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 7.17f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 189.67f, + internationalPrimarySchoolYearlyForOneChild = 6322.47f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 72.71f, + oneSummerDressInAChainStoreZaraHAndM = 15.81f, + onePairOfNikeRunningShoesMidRange = 74.93f, + onePairOfMenLeatherBusinessShoes = 47.42f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 0.95f, + monthlyPassRegularPrice = 24.24f, + taxiStartNormalTariff = 3.42f, + taxi1kmNormalTariff = 0.47f, + taxi1hourWaitingNormalTariff = 15.81f, + gasolineOneLiter = 2.02f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 28977.99f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 27397.38f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = 2634.36f, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 843.0f + ), + averageMonthlyNetSalaryAfterTax = null, + dataQuality = false + ), + CityEntity( + cityName = "Samarkand", + country = "Uzbekistan", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 5.0f, + mealFor2PeopleMidRangeRestaurant = 19.44f, + mealAtMcDonaldSOrEquivalent = 3.5f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 1.55f, + cokePepsiAThirdOfLiterBottleInRestaurants = 0.6f, + waterAThirdOfLiterBottleInRestaurants = 0.29f, + milkRegularOneLiter = 0.99f, + waterOneAndHalfLiterBottleAtTheMarket = 0.3f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 1.42f, + banana1kg = 1.71f, + oranges1kg = 2.28f, + tomato1kg = 1.48f, + potato1kg = 0.48f, + onion1kg = 0.36f, + lettuceOneHead = 0.3f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 0.27f, + riceWhite1kg = 1.2f, + eggsRegular12 = 1.49f, + localCheese1kg = 6.08f, + chickenFillets1kg = 3.64f, + beefRound1kgOrEquivalentBackLegRedMeat = 7.26f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 32.5f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.02f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 15.0f, + fitnessClubMonthlyFeeForOneAdult = 36.67f, + tennisCourtRentOneHourOnWeekend = 11.0f, + cinemaInternationalReleaseOneSeat = 1.5f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 200.0f, + internationalPrimarySchoolYearlyForOneChild = 5622.48f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 25.0f, + oneSummerDressInAChainStoreZaraHAndM = 50.0f, + onePairOfNikeRunningShoesMidRange = 80.0f, + onePairOfMenLeatherBusinessShoes = 99.12f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 0.15f, + monthlyPassRegularPrice = 10.0f, + taxiStartNormalTariff = 0.5f, + taxi1kmNormalTariff = 0.27f, + taxi1hourWaitingNormalTariff = 3.0f, + gasolineOneLiter = 0.91f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 13508.25f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 19690.73f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = 275.0f, + apartmentOneBedroomOutsideOfCentre = 206.67f, + apartment3BedroomsInCityCentre = 500.0f, + apartment3BedroomsOutsideOfCentre = 383.33f, + pricePerSquareMeterToBuyApartmentInCityCentre = 730.67f, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 482.64f + ), + averageMonthlyNetSalaryAfterTax = 253.33f, + dataQuality = false + ), CityEntity( + cityName = "Malabo", + country = "Equatorial Guinea", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 12.85f, + mealFor2PeopleMidRangeRestaurant = 40.16f, + mealAtMcDonaldSOrEquivalent = 20.08f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 6.43f, + cokePepsiAThirdOfLiterBottleInRestaurants = 1.07f, + waterAThirdOfLiterBottleInRestaurants = 1.2f, + milkRegularOneLiter = 2.25f, + waterOneAndHalfLiterBottleAtTheMarket = 0.91f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 5.62f, + banana1kg = 2.81f, + oranges1kg = 4.02f, + tomato1kg = 2.81f, + potato1kg = 4.26f, + onion1kg = 4.02f, + lettuceOneHead = 0.91f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 3.2f, + riceWhite1kg = 1.61f, + eggsRegular12 = 1.93f, + localCheese1kg = null, + chickenFillets1kg = 4.82f, + beefRound1kgOrEquivalentBackLegRedMeat = 4.02f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 46.59f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.27f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 160.64f, + fitnessClubMonthlyFeeForOneAdult = 54.89f, + tennisCourtRentOneHourOnWeekend = 28.02f, + cinemaInternationalReleaseOneSeat = 7.26f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 68.27f, + internationalPrimarySchoolYearlyForOneChild = 1743.37f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 24.1f, + oneSummerDressInAChainStoreZaraHAndM = 77.64f, + onePairOfNikeRunningShoesMidRange = 240.96f, + onePairOfMenLeatherBusinessShoes = 72.29f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 1.61f, + monthlyPassRegularPrice = 44.3f, + taxiStartNormalTariff = 0.8f, + taxi1kmNormalTariff = 0.8f, + taxi1hourWaitingNormalTariff = 6.43f, + gasolineOneLiter = 0.78f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 22048.18f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 32218.45f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = 200.8f, + apartmentOneBedroomOutsideOfCentre = 112.45f, + apartment3BedroomsInCityCentre = 722.89f, + apartment3BedroomsOutsideOfCentre = 361.45f, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = 321.28f, + dataQuality = true + ), CityEntity( + cityName = "Dehra Dun", + country = "India", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 1.84f, + mealFor2PeopleMidRangeRestaurant = 18.42f, + mealAtMcDonaldSOrEquivalent = 5.22f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 1.41f, + cokePepsiAThirdOfLiterBottleInRestaurants = 0.37f, + waterAThirdOfLiterBottleInRestaurants = 0.19f, + milkRegularOneLiter = 0.71f, + waterOneAndHalfLiterBottleAtTheMarket = 0.37f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 1.45f, + banana1kg = 0.67f, + oranges1kg = 0.93f, + tomato1kg = 0.54f, + potato1kg = 0.32f, + onion1kg = 0.43f, + lettuceOneHead = 0.52f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 0.44f, + riceWhite1kg = 0.56f, + eggsRegular12 = 0.88f, + localCheese1kg = 4.38f, + chickenFillets1kg = 3.19f, + beefRound1kgOrEquivalentBackLegRedMeat = 3.93f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 58.34f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.01f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 8.75f, + fitnessClubMonthlyFeeForOneAdult = 17.69f, + tennisCourtRentOneHourOnWeekend = 11.05f, + cinemaInternationalReleaseOneSeat = 4.3f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 51.28f, + internationalPrimarySchoolYearlyForOneChild = 1321.52f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 28.66f, + oneSummerDressInAChainStoreZaraHAndM = 31.63f, + onePairOfNikeRunningShoesMidRange = 63.87f, + onePairOfMenLeatherBusinessShoes = 51.58f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 0.43f, + monthlyPassRegularPrice = 4.91f, + taxiStartNormalTariff = 0.61f, + taxi1kmNormalTariff = 0.2f, + taxi1hourWaitingNormalTariff = 1.84f, + gasolineOneLiter = 1.21f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = null, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 18422.64f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = 145.85f, + apartmentOneBedroomOutsideOfCentre = 74.92f, + apartment3BedroomsInCityCentre = 331.61f, + apartment3BedroomsOutsideOfCentre = 186.68f, + pricePerSquareMeterToBuyApartmentInCityCentre = 2897.58f, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 615.45f + ), + averageMonthlyNetSalaryAfterTax = 358.14f, + dataQuality = true + ) + ) + + val cheapestApartmentsInCities = listOf( + CityEntity( + cityName = "Santiago de Cuba", + country = "Cuba", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 6.5f, + mealFor2PeopleMidRangeRestaurant = 15.0f, + mealAtMcDonaldSOrEquivalent = 5.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 2.0f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.0f, + waterAThirdOfLiterBottleInRestaurants = 1.0f, + milkRegularOneLiter = 3.8f, + waterOneAndHalfLiterBottleAtTheMarket = 2.0f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 11.02f, + banana1kg = 0.44f, + oranges1kg = 1.1f, + tomato1kg = 0.88f, + potato1kg = 1.1f, + onion1kg = 2.2f, + lettuceOneHead = 0.25f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 1.1f, + riceWhite1kg = 1.1f, + eggsRegular12 = 2.03f, + localCheese1kg = 9.0f, + chickenFillets1kg = 6.61f, + beefRound1kgOrEquivalentBackLegRedMeat = 6.61f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = null, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.1f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = null, + fitnessClubMonthlyFeeForOneAdult = null, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 1.0f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = null, + internationalPrimarySchoolYearlyForOneChild = null + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 40.0f, + oneSummerDressInAChainStoreZaraHAndM = 40.0f, + onePairOfNikeRunningShoesMidRange = 60.0f, + onePairOfMenLeatherBusinessShoes = 50.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = null, + taxi1kmNormalTariff = 0.7f, + taxi1hourWaitingNormalTariff = null, + gasolineOneLiter = null + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = null, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = null + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = 600.0f, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = 18f, + dataQuality = true + ), + + CityEntity( + cityName = "Domyat", + country = "Cuba", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 10.0f, + mealFor2PeopleMidRangeRestaurant = 30.0f, + mealAtMcDonaldSOrEquivalent = 5.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 1.91f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.0f, + waterAThirdOfLiterBottleInRestaurants = 0.5f, + milkRegularOneLiter = 3.52f, + waterOneAndHalfLiterBottleAtTheMarket = 0.98f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 6.24f, + banana1kg = null, + oranges1kg = 1.12f, + tomato1kg = 1.0f, + potato1kg = 1.82f, + onion1kg = 2.0f, + lettuceOneHead = 0.86f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 1.0f, + riceWhite1kg = 1.0f, + eggsRegular12 = 1.64f, + localCheese1kg = 4.0f, + chickenFillets1kg = 6.07f, + beefRound1kgOrEquivalentBackLegRedMeat = 10.0f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 11.5f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.26f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 80.0f, + fitnessClubMonthlyFeeForOneAdult = 6.0f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 1.12f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 70.0f, + internationalPrimarySchoolYearlyForOneChild = 15166.67f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 55.5f, + oneSummerDressInAChainStoreZaraHAndM = 44.33f, + onePairOfNikeRunningShoesMidRange = 79.17f, + onePairOfMenLeatherBusinessShoes = 78.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 0.5f, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 1.0f, + taxi1kmNormalTariff = 0.5f, + taxi1hourWaitingNormalTariff = 15.0f, + gasolineOneLiter = 1.14f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 80000.0f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 81500.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 60f + ), + averageMonthlyNetSalaryAfterTax = 25.0f, + dataQuality = true + ), CityEntity( + cityName = "Popeye Village", + country = "Cuba", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 10.0f, + mealFor2PeopleMidRangeRestaurant = 30.0f, + mealAtMcDonaldSOrEquivalent = 5.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 1.91f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.0f, + waterAThirdOfLiterBottleInRestaurants = 0.5f, + milkRegularOneLiter = 3.52f, + waterOneAndHalfLiterBottleAtTheMarket = 0.98f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 6.24f, + banana1kg = null, + oranges1kg = 1.12f, + tomato1kg = 1.0f, + potato1kg = 1.82f, + onion1kg = 2.0f, + lettuceOneHead = 0.86f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 1.0f, + riceWhite1kg = 1.0f, + eggsRegular12 = 1.64f, + localCheese1kg = 4.0f, + chickenFillets1kg = 6.07f, + beefRound1kgOrEquivalentBackLegRedMeat = 10.0f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 11.5f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.26f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 80.0f, + fitnessClubMonthlyFeeForOneAdult = 6.0f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 1.12f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 70.0f, + internationalPrimarySchoolYearlyForOneChild = 15166.67f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 55.5f, + oneSummerDressInAChainStoreZaraHAndM = 44.33f, + onePairOfNikeRunningShoesMidRange = 79.17f, + onePairOfMenLeatherBusinessShoes = 78.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 0.5f, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 1.0f, + taxi1kmNormalTariff = 0.5f, + taxi1hourWaitingNormalTariff = 15.0f, + gasolineOneLiter = 1.14f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 80000.0f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 81500.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 200f + ), + averageMonthlyNetSalaryAfterTax = 25.0f, + dataQuality = true + ), CityEntity( + cityName = "Hallstatt", + country = "Cuba", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 10.0f, + mealFor2PeopleMidRangeRestaurant = 30.0f, + mealAtMcDonaldSOrEquivalent = 5.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 1.91f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.0f, + waterAThirdOfLiterBottleInRestaurants = 0.5f, + milkRegularOneLiter = 3.52f, + waterOneAndHalfLiterBottleAtTheMarket = 0.98f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 6.24f, + banana1kg = null, + oranges1kg = 1.12f, + tomato1kg = 1.0f, + potato1kg = 1.82f, + onion1kg = 2.0f, + lettuceOneHead = 0.86f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 1.0f, + riceWhite1kg = 1.0f, + eggsRegular12 = 1.64f, + localCheese1kg = 4.0f, + chickenFillets1kg = 6.07f, + beefRound1kgOrEquivalentBackLegRedMeat = 10.0f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 11.5f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.26f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 80.0f, + fitnessClubMonthlyFeeForOneAdult = 6.0f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 1.12f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 70.0f, + internationalPrimarySchoolYearlyForOneChild = 15166.67f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 55.5f, + oneSummerDressInAChainStoreZaraHAndM = 44.33f, + onePairOfNikeRunningShoesMidRange = 79.17f, + onePairOfMenLeatherBusinessShoes = 78.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 0.5f, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 1.0f, + taxi1kmNormalTariff = 0.5f, + taxi1hourWaitingNormalTariff = 15.0f, + gasolineOneLiter = 1.14f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 80000.0f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 81500.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 500f + ), + averageMonthlyNetSalaryAfterTax = 25.0f, + dataQuality = true + ), CityEntity( + cityName = "Simiane La Rotonde", + country = "Cuba", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 10.0f, + mealFor2PeopleMidRangeRestaurant = 30.0f, + mealAtMcDonaldSOrEquivalent = 5.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 1.91f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.0f, + waterAThirdOfLiterBottleInRestaurants = 0.5f, + milkRegularOneLiter = 3.52f, + waterOneAndHalfLiterBottleAtTheMarket = 0.98f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 6.24f, + banana1kg = null, + oranges1kg = 1.12f, + tomato1kg = 1.0f, + potato1kg = 1.82f, + onion1kg = 2.0f, + lettuceOneHead = 0.86f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 1.0f, + riceWhite1kg = 1.0f, + eggsRegular12 = 1.64f, + localCheese1kg = 4.0f, + chickenFillets1kg = 6.07f, + beefRound1kgOrEquivalentBackLegRedMeat = 10.0f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 11.5f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.26f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 80.0f, + fitnessClubMonthlyFeeForOneAdult = 6.0f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 1.12f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 70.0f, + internationalPrimarySchoolYearlyForOneChild = 15166.67f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 55.5f, + oneSummerDressInAChainStoreZaraHAndM = 44.33f, + onePairOfNikeRunningShoesMidRange = 79.17f, + onePairOfMenLeatherBusinessShoes = 78.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 0.5f, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 1.0f, + taxi1kmNormalTariff = 0.5f, + taxi1hourWaitingNormalTariff = 15.0f, + gasolineOneLiter = 1.14f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 80000.0f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 81500.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 800f + ), + averageMonthlyNetSalaryAfterTax = 25.0f, + dataQuality = true + ), CityEntity( + cityName = "Cinque Terre", + country = "Cuba", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 10.0f, + mealFor2PeopleMidRangeRestaurant = 30.0f, + mealAtMcDonaldSOrEquivalent = 5.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 1.91f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.0f, + waterAThirdOfLiterBottleInRestaurants = 0.5f, + milkRegularOneLiter = 3.52f, + waterOneAndHalfLiterBottleAtTheMarket = 0.98f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 6.24f, + banana1kg = null, + oranges1kg = 1.12f, + tomato1kg = 1.0f, + potato1kg = 1.82f, + onion1kg = 2.0f, + lettuceOneHead = 0.86f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 1.0f, + riceWhite1kg = 1.0f, + eggsRegular12 = 1.64f, + localCheese1kg = 4.0f, + chickenFillets1kg = 6.07f, + beefRound1kgOrEquivalentBackLegRedMeat = 10.0f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 11.5f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.26f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 80.0f, + fitnessClubMonthlyFeeForOneAdult = 6.0f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 1.12f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 70.0f, + internationalPrimarySchoolYearlyForOneChild = 15166.67f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 55.5f, + oneSummerDressInAChainStoreZaraHAndM = 44.33f, + onePairOfNikeRunningShoesMidRange = 79.17f, + onePairOfMenLeatherBusinessShoes = 78.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 0.5f, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 1.0f, + taxi1kmNormalTariff = 0.5f, + taxi1hourWaitingNormalTariff = 15.0f, + gasolineOneLiter = 1.14f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 80000.0f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 81500.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 900f + ), + averageMonthlyNetSalaryAfterTax = 25.0f, + dataQuality = true + ), CityEntity( + cityName = "Ortahisar", + country = "Cuba", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 10.0f, + mealFor2PeopleMidRangeRestaurant = 30.0f, + mealAtMcDonaldSOrEquivalent = 5.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 1.91f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.0f, + waterAThirdOfLiterBottleInRestaurants = 0.5f, + milkRegularOneLiter = 3.52f, + waterOneAndHalfLiterBottleAtTheMarket = 0.98f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 6.24f, + banana1kg = null, + oranges1kg = 1.12f, + tomato1kg = 1.0f, + potato1kg = 1.82f, + onion1kg = 2.0f, + lettuceOneHead = 0.86f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 1.0f, + riceWhite1kg = 1.0f, + eggsRegular12 = 1.64f, + localCheese1kg = 4.0f, + chickenFillets1kg = 6.07f, + beefRound1kgOrEquivalentBackLegRedMeat = 10.0f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 11.5f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.26f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 80.0f, + fitnessClubMonthlyFeeForOneAdult = 6.0f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 1.12f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 70.0f, + internationalPrimarySchoolYearlyForOneChild = 15166.67f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 55.5f, + oneSummerDressInAChainStoreZaraHAndM = 44.33f, + onePairOfNikeRunningShoesMidRange = 79.17f, + onePairOfMenLeatherBusinessShoes = 78.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 0.5f, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 1.0f, + taxi1kmNormalTariff = 0.5f, + taxi1hourWaitingNormalTariff = 15.0f, + gasolineOneLiter = 1.14f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 80000.0f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 81500.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 1000f + ), + averageMonthlyNetSalaryAfterTax = 25.0f, + dataQuality = true + ), CityEntity( + cityName = "Oia", + country = "Cuba", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 10.0f, + mealFor2PeopleMidRangeRestaurant = 30.0f, + mealAtMcDonaldSOrEquivalent = 5.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 1.91f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.0f, + waterAThirdOfLiterBottleInRestaurants = 0.5f, + milkRegularOneLiter = 3.52f, + waterOneAndHalfLiterBottleAtTheMarket = 0.98f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 6.24f, + banana1kg = null, + oranges1kg = 1.12f, + tomato1kg = 1.0f, + potato1kg = 1.82f, + onion1kg = 2.0f, + lettuceOneHead = 0.86f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 1.0f, + riceWhite1kg = 1.0f, + eggsRegular12 = 1.64f, + localCheese1kg = 4.0f, + chickenFillets1kg = 6.07f, + beefRound1kgOrEquivalentBackLegRedMeat = 10.0f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 11.5f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.26f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 80.0f, + fitnessClubMonthlyFeeForOneAdult = 6.0f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 1.12f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 70.0f, + internationalPrimarySchoolYearlyForOneChild = 15166.67f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 55.5f, + oneSummerDressInAChainStoreZaraHAndM = 44.33f, + onePairOfNikeRunningShoesMidRange = 79.17f, + onePairOfMenLeatherBusinessShoes = 78.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 0.5f, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 1.0f, + taxi1kmNormalTariff = 0.5f, + taxi1hourWaitingNormalTariff = 15.0f, + gasolineOneLiter = 1.14f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 80000.0f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 81500.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 1200f + ), + averageMonthlyNetSalaryAfterTax = 25.0f, + dataQuality = true + ), CityEntity( + cityName = "Shirakawa-go", + country = "Cuba", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 10.0f, + mealFor2PeopleMidRangeRestaurant = 30.0f, + mealAtMcDonaldSOrEquivalent = 5.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 1.91f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.0f, + waterAThirdOfLiterBottleInRestaurants = 0.5f, + milkRegularOneLiter = 3.52f, + waterOneAndHalfLiterBottleAtTheMarket = 0.98f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 6.24f, + banana1kg = null, + oranges1kg = 1.12f, + tomato1kg = 1.0f, + potato1kg = 1.82f, + onion1kg = 2.0f, + lettuceOneHead = 0.86f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 1.0f, + riceWhite1kg = 1.0f, + eggsRegular12 = 1.64f, + localCheese1kg = 4.0f, + chickenFillets1kg = 6.07f, + beefRound1kgOrEquivalentBackLegRedMeat = 10.0f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 11.5f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.26f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 80.0f, + fitnessClubMonthlyFeeForOneAdult = 6.0f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 1.12f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 70.0f, + internationalPrimarySchoolYearlyForOneChild = 15166.67f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 55.5f, + oneSummerDressInAChainStoreZaraHAndM = 44.33f, + onePairOfNikeRunningShoesMidRange = 79.17f, + onePairOfMenLeatherBusinessShoes = 78.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 0.5f, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 1.0f, + taxi1kmNormalTariff = 0.5f, + taxi1hourWaitingNormalTariff = 15.0f, + gasolineOneLiter = 1.14f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 80000.0f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 81500.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 1500f + ), + averageMonthlyNetSalaryAfterTax = 25.0f, + dataQuality = true + ), CityEntity( + cityName = "Ait Ben-Haddou", + country = "Cuba", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 10.0f, + mealFor2PeopleMidRangeRestaurant = 30.0f, + mealAtMcDonaldSOrEquivalent = 5.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 1.91f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.0f, + waterAThirdOfLiterBottleInRestaurants = 0.5f, + milkRegularOneLiter = 3.52f, + waterOneAndHalfLiterBottleAtTheMarket = 0.98f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 6.24f, + banana1kg = null, + oranges1kg = 1.12f, + tomato1kg = 1.0f, + potato1kg = 1.82f, + onion1kg = 2.0f, + lettuceOneHead = 0.86f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 1.0f, + riceWhite1kg = 1.0f, + eggsRegular12 = 1.64f, + localCheese1kg = 4.0f, + chickenFillets1kg = 6.07f, + beefRound1kgOrEquivalentBackLegRedMeat = 10.0f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 11.5f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.26f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 80.0f, + fitnessClubMonthlyFeeForOneAdult = 6.0f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 1.12f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 70.0f, + internationalPrimarySchoolYearlyForOneChild = 15166.67f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 55.5f, + oneSummerDressInAChainStoreZaraHAndM = 44.33f, + onePairOfNikeRunningShoesMidRange = 79.17f, + onePairOfMenLeatherBusinessShoes = 78.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 0.5f, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 1.0f, + taxi1kmNormalTariff = 0.5f, + taxi1hourWaitingNormalTariff = 15.0f, + gasolineOneLiter = 1.14f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 80000.0f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 81500.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 1700f + ), + averageMonthlyNetSalaryAfterTax = 25.0f, + dataQuality = true + ), CityEntity( + cityName = "Cua Van", + country = "Cuba", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 10.0f, + mealFor2PeopleMidRangeRestaurant = 30.0f, + mealAtMcDonaldSOrEquivalent = 5.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 1.91f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.0f, + waterAThirdOfLiterBottleInRestaurants = 0.5f, + milkRegularOneLiter = 3.52f, + waterOneAndHalfLiterBottleAtTheMarket = 0.98f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 6.24f, + banana1kg = null, + oranges1kg = 1.12f, + tomato1kg = 1.0f, + potato1kg = 1.82f, + onion1kg = 2.0f, + lettuceOneHead = 0.86f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 1.0f, + riceWhite1kg = 1.0f, + eggsRegular12 = 1.64f, + localCheese1kg = 4.0f, + chickenFillets1kg = 6.07f, + beefRound1kgOrEquivalentBackLegRedMeat = 10.0f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 11.5f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.26f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 80.0f, + fitnessClubMonthlyFeeForOneAdult = 6.0f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 1.12f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 70.0f, + internationalPrimarySchoolYearlyForOneChild = 15166.67f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 55.5f, + oneSummerDressInAChainStoreZaraHAndM = 44.33f, + onePairOfNikeRunningShoesMidRange = 79.17f, + onePairOfMenLeatherBusinessShoes = 78.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 0.5f, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 1.0f, + taxi1kmNormalTariff = 0.5f, + taxi1hourWaitingNormalTariff = 15.0f, + gasolineOneLiter = 1.14f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 80000.0f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 81500.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 2000f + ), + averageMonthlyNetSalaryAfterTax = 25.0f, + dataQuality = true + ), CityEntity( + cityName = "Alberobello", + country = "Cuba", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 10.0f, + mealFor2PeopleMidRangeRestaurant = 30.0f, + mealAtMcDonaldSOrEquivalent = 5.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 1.91f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.0f, + waterAThirdOfLiterBottleInRestaurants = 0.5f, + milkRegularOneLiter = 3.52f, + waterOneAndHalfLiterBottleAtTheMarket = 0.98f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 6.24f, + banana1kg = null, + oranges1kg = 1.12f, + tomato1kg = 1.0f, + potato1kg = 1.82f, + onion1kg = 2.0f, + lettuceOneHead = 0.86f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 1.0f, + riceWhite1kg = 1.0f, + eggsRegular12 = 1.64f, + localCheese1kg = 4.0f, + chickenFillets1kg = 6.07f, + beefRound1kgOrEquivalentBackLegRedMeat = 10.0f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 11.5f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.26f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 80.0f, + fitnessClubMonthlyFeeForOneAdult = 6.0f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 1.12f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 70.0f, + internationalPrimarySchoolYearlyForOneChild = 15166.67f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 55.5f, + oneSummerDressInAChainStoreZaraHAndM = 44.33f, + onePairOfNikeRunningShoesMidRange = 79.17f, + onePairOfMenLeatherBusinessShoes = 78.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 0.5f, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 1.0f, + taxi1kmNormalTariff = 0.5f, + taxi1hourWaitingNormalTariff = 15.0f, + gasolineOneLiter = 1.14f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 80000.0f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 81500.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 2500f + ), + averageMonthlyNetSalaryAfterTax = 25.0f, + dataQuality = true + ), CityEntity( + cityName = "Júzcar", + country = "Cuba", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 10.0f, + mealFor2PeopleMidRangeRestaurant = 30.0f, + mealAtMcDonaldSOrEquivalent = 5.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 1.91f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.0f, + waterAThirdOfLiterBottleInRestaurants = 0.5f, + milkRegularOneLiter = 3.52f, + waterOneAndHalfLiterBottleAtTheMarket = 0.98f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 6.24f, + banana1kg = null, + oranges1kg = 1.12f, + tomato1kg = 1.0f, + potato1kg = 1.82f, + onion1kg = 2.0f, + lettuceOneHead = 0.86f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 1.0f, + riceWhite1kg = 1.0f, + eggsRegular12 = 1.64f, + localCheese1kg = 4.0f, + chickenFillets1kg = 6.07f, + beefRound1kgOrEquivalentBackLegRedMeat = 10.0f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 11.5f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.26f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 80.0f, + fitnessClubMonthlyFeeForOneAdult = 6.0f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 1.12f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 70.0f, + internationalPrimarySchoolYearlyForOneChild = 15166.67f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 55.5f, + oneSummerDressInAChainStoreZaraHAndM = 44.33f, + onePairOfNikeRunningShoesMidRange = 79.17f, + onePairOfMenLeatherBusinessShoes = 78.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 0.5f, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 1.0f, + taxi1kmNormalTariff = 0.5f, + taxi1hourWaitingNormalTariff = 15.0f, + gasolineOneLiter = 1.14f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 80000.0f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 81500.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 2700f + ), + averageMonthlyNetSalaryAfterTax = 25.0f, + dataQuality = true + ), CityEntity( + cityName = "Reine", + country = "Cuba", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 10.0f, + mealFor2PeopleMidRangeRestaurant = 30.0f, + mealAtMcDonaldSOrEquivalent = 5.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 1.91f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.0f, + waterAThirdOfLiterBottleInRestaurants = 0.5f, + milkRegularOneLiter = 3.52f, + waterOneAndHalfLiterBottleAtTheMarket = 0.98f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 6.24f, + banana1kg = null, + oranges1kg = 1.12f, + tomato1kg = 1.0f, + potato1kg = 1.82f, + onion1kg = 2.0f, + lettuceOneHead = 0.86f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 1.0f, + riceWhite1kg = 1.0f, + eggsRegular12 = 1.64f, + localCheese1kg = 4.0f, + chickenFillets1kg = 6.07f, + beefRound1kgOrEquivalentBackLegRedMeat = 10.0f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 11.5f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.26f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 80.0f, + fitnessClubMonthlyFeeForOneAdult = 6.0f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 1.12f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 70.0f, + internationalPrimarySchoolYearlyForOneChild = 15166.67f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 55.5f, + oneSummerDressInAChainStoreZaraHAndM = 44.33f, + onePairOfNikeRunningShoesMidRange = 79.17f, + onePairOfMenLeatherBusinessShoes = 78.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 0.5f, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 1.0f, + taxi1kmNormalTariff = 0.5f, + taxi1hourWaitingNormalTariff = 15.0f, + gasolineOneLiter = 1.14f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 80000.0f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 81500.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 5000f + ), + averageMonthlyNetSalaryAfterTax = 25.0f, + dataQuality = true + ) + ) + + val citiesAverageSalary = listOf( + CityEntity( + cityName = "Santiago de Cuba", + country = "Cuba", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 6.5f, + mealFor2PeopleMidRangeRestaurant = 15.0f, + mealAtMcDonaldSOrEquivalent = 5.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 2.0f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.0f, + waterAThirdOfLiterBottleInRestaurants = 1.0f, + milkRegularOneLiter = 3.8f, + waterOneAndHalfLiterBottleAtTheMarket = 2.0f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 11.02f, + banana1kg = 0.44f, + oranges1kg = 1.1f, + tomato1kg = 0.88f, + potato1kg = 1.1f, + onion1kg = 2.2f, + lettuceOneHead = 0.25f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 1.1f, + riceWhite1kg = 1.1f, + eggsRegular12 = 2.03f, + localCheese1kg = 9.0f, + chickenFillets1kg = 6.61f, + beefRound1kgOrEquivalentBackLegRedMeat = 6.61f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = null, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.1f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = null, + fitnessClubMonthlyFeeForOneAdult = null, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 1.0f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = null, + internationalPrimarySchoolYearlyForOneChild = null + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 40.0f, + oneSummerDressInAChainStoreZaraHAndM = 40.0f, + onePairOfNikeRunningShoesMidRange = 60.0f, + onePairOfMenLeatherBusinessShoes = 50.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = null, + taxi1kmNormalTariff = 0.7f, + taxi1hourWaitingNormalTariff = null, + gasolineOneLiter = null + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = null, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = null + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = 600.0f, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = 18f, + dataQuality = false + ), + CityEntity( + cityName = "Sancti Spiritus", + country = "Cuba", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 7.0f, + mealFor2PeopleMidRangeRestaurant = 25.0f, + mealAtMcDonaldSOrEquivalent = 5.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = null, + cokePepsiAThirdOfLiterBottleInRestaurants = 1.0f, + waterAThirdOfLiterBottleInRestaurants = 0.75f, + milkRegularOneLiter = null, + waterOneAndHalfLiterBottleAtTheMarket = 1.0f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 3.0f, + banana1kg = 0.5f, + oranges1kg = 0.5f, + tomato1kg = 1.0f, + potato1kg = 2.0f, + onion1kg = 2.0f, + lettuceOneHead = null + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = null, + riceWhite1kg = 1.0f, + eggsRegular12 = 2.4f, + localCheese1kg = 4.0f, + chickenFillets1kg = 5.0f, + beefRound1kgOrEquivalentBackLegRedMeat = 10.0f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 30.0f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = null, + internet60MbpsOrMoreUnlimitedDataCableAdsl = null, + fitnessClubMonthlyFeeForOneAdult = null, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = null, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = null, + internationalPrimarySchoolYearlyForOneChild = null + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 25.0f, + oneSummerDressInAChainStoreZaraHAndM = 15.0f, + onePairOfNikeRunningShoesMidRange = 40.0f, + onePairOfMenLeatherBusinessShoes = 30.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 1.0f, + taxi1kmNormalTariff = 1.0f, + taxi1hourWaitingNormalTariff = null, + gasolineOneLiter = 2.0f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 50000.0f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 70000.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = 20.0f, + dataQuality = false + ), + CityEntity( + cityName = "Santa Clara", + country = "Cuba", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 10.0f, + mealFor2PeopleMidRangeRestaurant = 30.0f, + mealAtMcDonaldSOrEquivalent = 5.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 1.91f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.0f, + waterAThirdOfLiterBottleInRestaurants = 0.5f, + milkRegularOneLiter = 3.52f, + waterOneAndHalfLiterBottleAtTheMarket = 0.98f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 6.24f, + banana1kg = null, + oranges1kg = 1.12f, + tomato1kg = 1.0f, + potato1kg = 1.82f, + onion1kg = 2.0f, + lettuceOneHead = 0.86f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 1.0f, + riceWhite1kg = 1.0f, + eggsRegular12 = 1.64f, + localCheese1kg = 4.0f, + chickenFillets1kg = 6.07f, + beefRound1kgOrEquivalentBackLegRedMeat = 10.0f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 11.5f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.26f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 80.0f, + fitnessClubMonthlyFeeForOneAdult = 6.0f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 1.12f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 70.0f, + internationalPrimarySchoolYearlyForOneChild = 15166.67f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 55.5f, + oneSummerDressInAChainStoreZaraHAndM = 44.33f, + onePairOfNikeRunningShoesMidRange = 79.17f, + onePairOfMenLeatherBusinessShoes = 78.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 0.5f, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 1.0f, + taxi1kmNormalTariff = 0.5f, + taxi1hourWaitingNormalTariff = 15.0f, + gasolineOneLiter = 1.14f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 80000.0f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 81500.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = 25.0f, + dataQuality = true + ) + ) + + val invalidData = listOf( + CityEntity( + cityName = "Santiago de Cuba", + country = "Cuba", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = null, + mealFor2PeopleMidRangeRestaurant = null, + mealAtMcDonaldSOrEquivalent = null + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = null, + cokePepsiAThirdOfLiterBottleInRestaurants = null, + waterAThirdOfLiterBottleInRestaurants = null, + milkRegularOneLiter = null, + waterOneAndHalfLiterBottleAtTheMarket = null + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = null, + banana1kg = null, + oranges1kg = null, + tomato1kg = null, + potato1kg = null, + onion1kg = null, + lettuceOneHead = null + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = null, + riceWhite1kg = null, + eggsRegular12 = null, + localCheese1kg = null, + chickenFillets1kg = null, + beefRound1kgOrEquivalentBackLegRedMeat = null + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = null, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = null, + internet60MbpsOrMoreUnlimitedDataCableAdsl = null, + fitnessClubMonthlyFeeForOneAdult = null, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = null, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = null, + internationalPrimarySchoolYearlyForOneChild = null + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = null, + oneSummerDressInAChainStoreZaraHAndM = null, + onePairOfNikeRunningShoesMidRange = null, + onePairOfMenLeatherBusinessShoes = null + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = null, + taxi1kmNormalTariff = 0.7f, + taxi1hourWaitingNormalTariff = null, + gasolineOneLiter = null + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = null, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = null + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = null, + dataQuality = false + ), + + ) + + val empty = emptyList() + + val countriesTaxes = listOf( + CityEntity( + cityName = "Great Falls", + country = "United States", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 15.0f, + mealFor2PeopleMidRangeRestaurant = 40.0f, + mealAtMcDonaldSOrEquivalent = 9.5f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 4.5f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.02f, + waterAThirdOfLiterBottleInRestaurants = 1.71f, + milkRegularOneLiter = 1.02f, + waterOneAndHalfLiterBottleAtTheMarket = 1.86f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 4.41f, + banana1kg = 1.58f, + oranges1kg = 3.93f, + tomato1kg = 4.41f, + potato1kg = 1.65f, + onion1kg = 2.08f, + lettuceOneHead = 1.25f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 2.95f, + riceWhite1kg = 4.12f, + eggsRegular12 = 3.25f, + localCheese1kg = 9.92f, + chickenFillets1kg = 11.01f, + beefRound1kgOrEquivalentBackLegRedMeat = 13.23f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 145.61f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.15f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 65.83f, + fitnessClubMonthlyFeeForOneAdult = null, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 10.0f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 2500.0f, + internationalPrimarySchoolYearlyForOneChild = 75000.0f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 51.25f, + oneSummerDressInAChainStoreZaraHAndM = 27.5f, + onePairOfNikeRunningShoesMidRange = 70.0f, + onePairOfMenLeatherBusinessShoes = 120.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 1.5f, + monthlyPassRegularPrice = 55.0f, + taxiStartNormalTariff = 9.5f, + taxi1kmNormalTariff = 1.46f, + taxi1hourWaitingNormalTariff = 25.0f, + gasolineOneLiter = 1.44f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 31000.0f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 23000.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = 750.0f, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = 1600.0f, + apartment3BedroomsOutsideOfCentre = 2250.0f, + pricePerSquareMeterToBuyApartmentInCityCentre = 2583.34f, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 7965.29f + ), + averageMonthlyNetSalaryAfterTax = 1000.0f, + dataQuality = true + ), CityEntity( + cityName = "Roseburg", + country = "United States", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 15.0f, + mealFor2PeopleMidRangeRestaurant = 60.0f, + mealAtMcDonaldSOrEquivalent = 8.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 4.49f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.22f, + waterAThirdOfLiterBottleInRestaurants = 1.26f, + milkRegularOneLiter = 0.98f, + waterOneAndHalfLiterBottleAtTheMarket = 1.0f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 2.3f, + banana1kg = 0.99f, + oranges1kg = 2.2f, + tomato1kg = 1.1f, + potato1kg = 1.71f, + onion1kg = 1.62f, + lettuceOneHead = 1.83f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 3.04f, + riceWhite1kg = 2.2f, + eggsRegular12 = 1.69f, + localCheese1kg = 12.9f, + chickenFillets1kg = 16.17f, + beefRound1kgOrEquivalentBackLegRedMeat = 12.49f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 100.0f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.25f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 55.0f, + fitnessClubMonthlyFeeForOneAdult = 50.0f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 12.5f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 921.42f, + internationalPrimarySchoolYearlyForOneChild = 8950.0f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 41.67f, + oneSummerDressInAChainStoreZaraHAndM = 25.0f, + onePairOfNikeRunningShoesMidRange = 63.33f, + onePairOfMenLeatherBusinessShoes = 50.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 2.0f, + monthlyPassRegularPrice = 20.0f, + taxiStartNormalTariff = 3.0f, + taxi1kmNormalTariff = 1.86f, + taxi1hourWaitingNormalTariff = 15.0f, + gasolineOneLiter = 1.36f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 20000.0f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 22328.2f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = 1300.0f, + apartmentOneBedroomOutsideOfCentre = 1475.0f, + apartment3BedroomsInCityCentre = 2350.0f, + apartment3BedroomsOutsideOfCentre = 2625.0f, + pricePerSquareMeterToBuyApartmentInCityCentre = 1883.68f, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 1614.59f + ), + averageMonthlyNetSalaryAfterTax = 1200.0f, + dataQuality = true + ), + CityEntity( + cityName = "Moose Jaw", + country = "Canada", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 14.82f, + mealFor2PeopleMidRangeRestaurant = 55.59f, + mealAtMcDonaldSOrEquivalent = 8.89f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 3.29f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.16f, + waterAThirdOfLiterBottleInRestaurants = 1.65f, + milkRegularOneLiter = 1.48f, + waterOneAndHalfLiterBottleAtTheMarket = 1.98f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 3.15f, + banana1kg = 1.06f, + oranges1kg = 2.96f, + tomato1kg = 2.88f, + potato1kg = 1.91f, + onion1kg = 1.74f, + lettuceOneHead = 2.22f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 1.91f, + riceWhite1kg = 1.63f, + eggsRegular12 = 3.19f, + localCheese1kg = 10.28f, + chickenFillets1kg = 8.17f, + beefRound1kgOrEquivalentBackLegRedMeat = 10.93f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 154.9f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.19f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 54.66f, + fitnessClubMonthlyFeeForOneAdult = 55.59f, + tennisCourtRentOneHourOnWeekend = 48.17f, + cinemaInternationalReleaseOneSeat = 7.41f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 567.6f, + internationalPrimarySchoolYearlyForOneChild = 7893.24f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 29.65f, + oneSummerDressInAChainStoreZaraHAndM = 25.94f, + onePairOfNikeRunningShoesMidRange = 79.67f, + onePairOfMenLeatherBusinessShoes = 101.91f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 0.93f, + monthlyPassRegularPrice = 29.65f, + taxiStartNormalTariff = 2.59f, + taxi1kmNormalTariff = 0.56f, + taxi1hourWaitingNormalTariff = 22.23f, + gasolineOneLiter = 1.35f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 20752.19f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 20011.04f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = 1185.84f, + dataQuality = true + ), CityEntity( + cityName = "Chetumal", + country = "Mexico", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 12.56f, + mealFor2PeopleMidRangeRestaurant = 23.21f, + mealAtMcDonaldSOrEquivalent = 5.06f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 2.84f, + cokePepsiAThirdOfLiterBottleInRestaurants = 0.71f, + waterAThirdOfLiterBottleInRestaurants = 0.61f, + milkRegularOneLiter = 0.89f, + waterOneAndHalfLiterBottleAtTheMarket = 0.72f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 2.84f, + banana1kg = 1.03f, + oranges1kg = 1.37f, + tomato1kg = 1.55f, + potato1kg = 1.42f, + onion1kg = 1.03f, + lettuceOneHead = 0.93f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 1.55f, + riceWhite1kg = 1.16f, + eggsRegular12 = 1.5f, + localCheese1kg = 4.13f, + chickenFillets1kg = 4.38f, + beefRound1kgOrEquivalentBackLegRedMeat = null + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 99.25f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.26f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 27.21f, + fitnessClubMonthlyFeeForOneAdult = 18.05f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 3.09f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 61.88f, + internationalPrimarySchoolYearlyForOneChild = null + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 41.26f, + oneSummerDressInAChainStoreZaraHAndM = 36.1f, + onePairOfNikeRunningShoesMidRange = 77.35f, + onePairOfMenLeatherBusinessShoes = 51.57f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 0.57f, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 1.24f, + taxi1kmNormalTariff = 1.29f, + taxi1hourWaitingNormalTariff = 3.48f, + gasolineOneLiter = 1.11f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 21246.42f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 16759.92f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = 198.49f, + apartmentOneBedroomOutsideOfCentre = 126.98f, + apartment3BedroomsInCityCentre = 398.77f, + apartment3BedroomsOutsideOfCentre = 326.44f, + pricePerSquareMeterToBuyApartmentInCityCentre = 626.31f, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 309.41f + ), + averageMonthlyNetSalaryAfterTax = 257.84f, + dataQuality = true + ), + CityEntity( + cityName = "Kuysinjaq", + country = "Iraq", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 2.06f, + mealFor2PeopleMidRangeRestaurant = 10.96f, + mealAtMcDonaldSOrEquivalent = null + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 1.37f, + cokePepsiAThirdOfLiterBottleInRestaurants = 0.34f, + waterAThirdOfLiterBottleInRestaurants = 0.17f, + milkRegularOneLiter = 1.03f, + waterOneAndHalfLiterBottleAtTheMarket = 0.34f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 0.69f, + banana1kg = 1.03f, + oranges1kg = 1.03f, + tomato1kg = 0.51f, + potato1kg = 0.51f, + onion1kg = 0.51f, + lettuceOneHead = 0.34f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 0.69f, + riceWhite1kg = 1.03f, + eggsRegular12 = 1.37f, + localCheese1kg = 6.85f, + chickenFillets1kg = 3.43f, + beefRound1kgOrEquivalentBackLegRedMeat = 8.22f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = null, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.06f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 34.26f, + fitnessClubMonthlyFeeForOneAdult = 13.7f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 10.28f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 57.1f, + internationalPrimarySchoolYearlyForOneChild = 1027.75f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 13.7f, + oneSummerDressInAChainStoreZaraHAndM = 17.13f, + onePairOfNikeRunningShoesMidRange = null, + onePairOfMenLeatherBusinessShoes = 17.13f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 1.37f, + taxi1kmNormalTariff = 0.69f, + taxi1hourWaitingNormalTariff = 3.43f, + gasolineOneLiter = 0.62f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = null, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 16444.04f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = 137.03f, + apartmentOneBedroomOutsideOfCentre = 102.78f, + apartment3BedroomsInCityCentre = 205.55f, + apartment3BedroomsOutsideOfCentre = 171.29f, + pricePerSquareMeterToBuyApartmentInCityCentre = 342.58f, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 137.03f + ), + averageMonthlyNetSalaryAfterTax = 411.1f, + dataQuality = true + ) + ) + + val bestCityForSavingMoney = listOf( + + CityEntity( + cityName = "Moncks Corner", + country = "United States", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 14.5f, + mealFor2PeopleMidRangeRestaurant = 40.0f, + mealAtMcDonaldSOrEquivalent = 7.5f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 4.33f, + cokePepsiAThirdOfLiterBottleInRestaurants = 0.2f, + waterAThirdOfLiterBottleInRestaurants = 1.0f, + milkRegularOneLiter = 0.91f, + waterOneAndHalfLiterBottleAtTheMarket = 1.75f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 0.1f, + banana1kg = 0.1f, + oranges1kg = 0.1f, + tomato1kg = 0.1f, + potato1kg = 0.1f, + onion1kg = 0.1f, + lettuceOneHead = 0.1f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 2.2f, + riceWhite1kg = 2.62f, + eggsRegular12 = 2.17f, + localCheese1kg = 11.02f, + chickenFillets1kg = 8.8f, + beefRound1kgOrEquivalentBackLegRedMeat = 15.76f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 144.92f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.0f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 67.78f, + fitnessClubMonthlyFeeForOneAdult = null, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 9.0f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 1500.0f, + internationalPrimarySchoolYearlyForOneChild = null + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 52.0f, + oneSummerDressInAChainStoreZaraHAndM = 46.33f, + onePairOfNikeRunningShoesMidRange = 94.67f, + onePairOfMenLeatherBusinessShoes = 90.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 2.1f, + taxi1kmNormalTariff = 1.49f, + taxi1hourWaitingNormalTariff = 15.0f, + gasolineOneLiter = 0.92f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = null, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 28500.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = 1000.0f, + apartmentOneBedroomOutsideOfCentre = 100.0f, + apartment3BedroomsInCityCentre = 1000.0f, + apartment3BedroomsOutsideOfCentre = 100.0f, + pricePerSquareMeterToBuyApartmentInCityCentre = 1111.1f, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 1111.1f + ), + averageMonthlyNetSalaryAfterTax = 90000000.0f, + dataQuality = false + ), + + + CityEntity( + cityName = "Keller", + country = "United States", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 30.0f, + mealFor2PeopleMidRangeRestaurant = 75.0f, + mealAtMcDonaldSOrEquivalent = 7.5f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 5.33f, + cokePepsiAThirdOfLiterBottleInRestaurants = 1.5f, + waterAThirdOfLiterBottleInRestaurants = 1.17f, + milkRegularOneLiter = 0.88f, + waterOneAndHalfLiterBottleAtTheMarket = 3.0f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 4.13f, + banana1kg = 1.33f, + oranges1kg = 5.75f, + tomato1kg = 6.03f, + potato1kg = 4.05f, + onion1kg = 3.36f, + lettuceOneHead = 1.59f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 2.84f, + riceWhite1kg = 3.98f, + eggsRegular12 = 3.0f, + localCheese1kg = 15.08f, + chickenFillets1kg = 7.61f, + beefRound1kgOrEquivalentBackLegRedMeat = 18.7f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 210.09f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = null, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 67.8f, + fitnessClubMonthlyFeeForOneAdult = 39.0f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 9.5f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 1125.0f, + internationalPrimarySchoolYearlyForOneChild = null + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 47.5f, + oneSummerDressInAChainStoreZaraHAndM = 26.0f, + onePairOfNikeRunningShoesMidRange = 92.5f, + onePairOfMenLeatherBusinessShoes = 200.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 3.12f, + taxi1kmNormalTariff = 1.12f, + taxi1hourWaitingNormalTariff = 18.0f, + gasolineOneLiter = 0.99f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 29880.0f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 20425.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = 1521.67f, + apartmentOneBedroomOutsideOfCentre = 1111.1f, + apartment3BedroomsInCityCentre = 3200.0f, + apartment3BedroomsOutsideOfCentre = 1111.1f, + pricePerSquareMeterToBuyApartmentInCityCentre = 1111.1f, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 1111.1f + ), + averageMonthlyNetSalaryAfterTax = 5555.5f, + dataQuality = false + ), + + + CityEntity( + cityName = "Malden", + country = "United States", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = null, + mealFor2PeopleMidRangeRestaurant = null, + mealAtMcDonaldSOrEquivalent = 7.5f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 4.5f, + cokePepsiAThirdOfLiterBottleInRestaurants = null, + waterAThirdOfLiterBottleInRestaurants = 2.0f, + milkRegularOneLiter = null, + waterOneAndHalfLiterBottleAtTheMarket = 1.33f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 4.92f, + banana1kg = 2.0f, + oranges1kg = 6.61f, + tomato1kg = 5.51f, + potato1kg = 5.51f, + onion1kg = 4.4f, + lettuceOneHead = 2.03f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = null, + riceWhite1kg = 6.17f, + eggsRegular12 = null, + localCheese1kg = 9.92f, + chickenFillets1kg = null, + beefRound1kgOrEquivalentBackLegRedMeat = null + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 221.47f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = null, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 67.8f, + fitnessClubMonthlyFeeForOneAdult = null, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 12.0f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = null, + internationalPrimarySchoolYearlyForOneChild = 5000.0f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 51.66f, + oneSummerDressInAChainStoreZaraHAndM = 50.0f, + onePairOfNikeRunningShoesMidRange = 69.99f, + onePairOfMenLeatherBusinessShoes = 104.67f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 2.5f, + monthlyPassRegularPrice = 84.0f, + taxiStartNormalTariff = null, + taxi1kmNormalTariff = null, + taxi1hourWaitingNormalTariff = null, + gasolineOneLiter = null + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = null, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 20000.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = 10763.91f, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 6458.35f + ), + averageMonthlyNetSalaryAfterTax = 14.9f, + dataQuality = false + ), + + + CityEntity( + cityName = "Pearl City", + country = "United States", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = null, + mealFor2PeopleMidRangeRestaurant = null, + mealAtMcDonaldSOrEquivalent = 10.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 5.25f, + cokePepsiAThirdOfLiterBottleInRestaurants = 1000.0f, + waterAThirdOfLiterBottleInRestaurants = 1.44f, + milkRegularOneLiter = 2.38f, + waterOneAndHalfLiterBottleAtTheMarket = 2.08f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 5.91f, + banana1kg = 3.84f, + oranges1kg = 7.02f, + tomato1kg = 5.94f, + potato1kg = 4.95f, + onion1kg = 4.44f, + lettuceOneHead = 2.74f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 4.41f, + riceWhite1kg = 7.33f, + eggsRegular12 = null, + localCheese1kg = 12.13f, + chickenFillets1kg = null, + beefRound1kgOrEquivalentBackLegRedMeat = 26.46f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 251.16f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = null, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 68.12f, + fitnessClubMonthlyFeeForOneAdult = 60.0f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = null, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = null, + internationalPrimarySchoolYearlyForOneChild = null + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 47.55f, + oneSummerDressInAChainStoreZaraHAndM = 35.87f, + onePairOfNikeRunningShoesMidRange = 79.29f, + onePairOfMenLeatherBusinessShoes = null + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = null, + taxi1kmNormalTariff = null, + taxi1hourWaitingNormalTariff = null, + gasolineOneLiter = null + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = null, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 21105.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = 2000.0f, + apartmentOneBedroomOutsideOfCentre = 1750.0f, + apartment3BedroomsInCityCentre = 5000.0f, + apartment3BedroomsOutsideOfCentre = 4750.0f, + pricePerSquareMeterToBuyApartmentInCityCentre = 4000.0f, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 3500.0f + ), + averageMonthlyNetSalaryAfterTax = 9000.0f, + dataQuality = false + ) + + ) + } +} + + + + + + + + diff --git a/src/test/kotlin/data/FashionShoppingFakeData.kt b/src/test/kotlin/data/FashionShoppingFakeData.kt new file mode 100644 index 000000000..3d53c8418 --- /dev/null +++ b/src/test/kotlin/data/FashionShoppingFakeData.kt @@ -0,0 +1,234 @@ +package data + +import interactor.CostOfLivingDataSource +import model.* + + +class FashionShoppingFakeData : CostOfLivingDataSource { + override fun getAllCitiesData(): List { + return listOf( + CityEntity( + cityName = "Santiago de Cuba", + country = "Cuba", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 6.5f, + mealFor2PeopleMidRangeRestaurant = 15.0f, + mealAtMcDonaldSOrEquivalent = 5.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 2.0f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.0f, + waterAThirdOfLiterBottleInRestaurants = 1.0f, + milkRegularOneLiter = 3.8f, + waterOneAndHalfLiterBottleAtTheMarket = 2.0f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 11.02f, + banana1kg = 0.44f, + oranges1kg = 1.1f, + tomato1kg = 0.88f, + potato1kg = 1.1f, + onion1kg = 2.2f, + lettuceOneHead = 0.25f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 1.1f, + riceWhite1kg = 1.1f, + eggsRegular12 = 2.03f, + localCheese1kg = 9.0f, + chickenFillets1kg = 6.61f, + beefRound1kgOrEquivalentBackLegRedMeat = 6.61f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = null, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.1f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = null, + fitnessClubMonthlyFeeForOneAdult = null, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 1.0f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = null, + internationalPrimarySchoolYearlyForOneChild = null + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 40.0f, + oneSummerDressInAChainStoreZaraHAndM = 40.0f, + onePairOfNikeRunningShoesMidRange = 60.0f, + onePairOfMenLeatherBusinessShoes = 50.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = null, + taxi1kmNormalTariff = 0.7f, + taxi1hourWaitingNormalTariff = null, + gasolineOneLiter = null + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = null, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = null + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = 600.0f, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = 18f, + dataQuality = false + ), + CityEntity( + cityName = "Sancti Spiritus", + country = "Cuba", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 7.0f, + mealFor2PeopleMidRangeRestaurant = 25.0f, + mealAtMcDonaldSOrEquivalent = 5.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = null, + cokePepsiAThirdOfLiterBottleInRestaurants = 1.0f, + waterAThirdOfLiterBottleInRestaurants = 0.75f, + milkRegularOneLiter = null, + waterOneAndHalfLiterBottleAtTheMarket = 1.0f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 3.0f, + banana1kg = 0.5f, + oranges1kg = 0.5f, + tomato1kg = 1.0f, + potato1kg = 2.0f, + onion1kg = 2.0f, + lettuceOneHead = null + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = null, + riceWhite1kg = 1.0f, + eggsRegular12 = 2.4f, + localCheese1kg = 4.0f, + chickenFillets1kg = 5.0f, + beefRound1kgOrEquivalentBackLegRedMeat = 10.0f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 30.0f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = null, + internet60MbpsOrMoreUnlimitedDataCableAdsl = null, + fitnessClubMonthlyFeeForOneAdult = null, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = null, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = null, + internationalPrimarySchoolYearlyForOneChild = null + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 25.0f, + oneSummerDressInAChainStoreZaraHAndM = 15.0f, + onePairOfNikeRunningShoesMidRange = 40.0f, + onePairOfMenLeatherBusinessShoes = 30.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 1.0f, + taxi1kmNormalTariff = 1.0f, + taxi1hourWaitingNormalTariff = null, + gasolineOneLiter = 2.0f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 50000.0f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 70000.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = 20.0f, + dataQuality = false + ), + CityEntity( + cityName = "Santa Clara", + country = "Cuba", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 10.0f, + mealFor2PeopleMidRangeRestaurant = 30.0f, + mealAtMcDonaldSOrEquivalent = 5.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 1.91f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.0f, + waterAThirdOfLiterBottleInRestaurants = 0.5f, + milkRegularOneLiter = 3.52f, + waterOneAndHalfLiterBottleAtTheMarket = 0.98f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 6.24f, + banana1kg = null, + oranges1kg = 1.12f, + tomato1kg = 1.0f, + potato1kg = 1.82f, + onion1kg = 2.0f, + lettuceOneHead = 0.86f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 1.0f, + riceWhite1kg = 1.0f, + eggsRegular12 = 1.64f, + localCheese1kg = 4.0f, + chickenFillets1kg = 6.07f, + beefRound1kgOrEquivalentBackLegRedMeat = 10.0f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 11.5f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.26f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 80.0f, + fitnessClubMonthlyFeeForOneAdult = 6.0f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 1.12f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 70.0f, + internationalPrimarySchoolYearlyForOneChild = 15166.67f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 55.5f, + oneSummerDressInAChainStoreZaraHAndM = 44.33f, + onePairOfNikeRunningShoesMidRange = 79.17f, + onePairOfMenLeatherBusinessShoes = 78.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 0.5f, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 1.0f, + taxi1kmNormalTariff = 0.5f, + taxi1hourWaitingNormalTariff = 15.0f, + gasolineOneLiter = 1.14f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 80000.0f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 81500.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = 25.0f, + dataQuality = false + ) + ) + + } +} + + + + + + + + diff --git a/src/test/kotlin/data/FruitsAndVegetablesFakeData.kt b/src/test/kotlin/data/FruitsAndVegetablesFakeData.kt new file mode 100644 index 000000000..ed66f4c67 --- /dev/null +++ b/src/test/kotlin/data/FruitsAndVegetablesFakeData.kt @@ -0,0 +1,986 @@ +package data + +import interactor.CostOfLivingDataSource +import model.* + + +class FruitsAndVegetablesFakeData : CostOfLivingDataSource { + override fun getAllCitiesData(): List { + return listOf( + + // region City 1 + CityEntity( + cityName = "Moncks Corner", + country = "United States", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 14.5f, + mealFor2PeopleMidRangeRestaurant = 40.0f, + mealAtMcDonaldSOrEquivalent = 7.5f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 4.33f, + cokePepsiAThirdOfLiterBottleInRestaurants = 1.0f, + waterAThirdOfLiterBottleInRestaurants = 1.0f, + milkRegularOneLiter = 0.91f, + waterOneAndHalfLiterBottleAtTheMarket = 1.75f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 0.1f, + banana1kg = 0.1f, + oranges1kg = 0.1f, + tomato1kg = 0.1f, + potato1kg = 0.1f, + onion1kg = 0.1f, + lettuceOneHead = 0.1f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 2.2f, + riceWhite1kg = 2.62f, + eggsRegular12 = 2.17f, + localCheese1kg = 11.02f, + chickenFillets1kg = 8.8f, + beefRound1kgOrEquivalentBackLegRedMeat = 15.76f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 144.92f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.0f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 67.78f, + fitnessClubMonthlyFeeForOneAdult = null, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 9.0f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 1500.0f, + internationalPrimarySchoolYearlyForOneChild = null + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 52.0f, + oneSummerDressInAChainStoreZaraHAndM = 46.33f, + onePairOfNikeRunningShoesMidRange = 94.67f, + onePairOfMenLeatherBusinessShoes = 90.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 2.1f, + taxi1kmNormalTariff = 1.49f, + taxi1hourWaitingNormalTariff = 15.0f, + gasolineOneLiter = 0.92f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = null, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 28500.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = Float.NaN, + dataQuality = false + ), + // endregion + + // region City 2 + CityEntity( + cityName = "Keller", + country = "United States", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 30.0f, + mealFor2PeopleMidRangeRestaurant = 75.0f, + mealAtMcDonaldSOrEquivalent = 7.5f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 5.33f, + cokePepsiAThirdOfLiterBottleInRestaurants = 1.8f, + waterAThirdOfLiterBottleInRestaurants = 1.17f, + milkRegularOneLiter = 0.88f, + waterOneAndHalfLiterBottleAtTheMarket = 3.0f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 4.13f, + banana1kg = 1.33f, + oranges1kg = 5.75f, + tomato1kg = 6.03f, + potato1kg = 4.05f, + onion1kg = 3.36f, + lettuceOneHead = 1.59f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 2.84f, + riceWhite1kg = 3.98f, + eggsRegular12 = 3.0f, + localCheese1kg = 15.08f, + chickenFillets1kg = 7.61f, + beefRound1kgOrEquivalentBackLegRedMeat = 18.7f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 210.09f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = null, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 67.8f, + fitnessClubMonthlyFeeForOneAdult = 39.0f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 9.5f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 1125.0f, + internationalPrimarySchoolYearlyForOneChild = null + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 47.5f, + oneSummerDressInAChainStoreZaraHAndM = 26.0f, + onePairOfNikeRunningShoesMidRange = 92.5f, + onePairOfMenLeatherBusinessShoes = 200.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 3.12f, + taxi1kmNormalTariff = 1.12f, + taxi1hourWaitingNormalTariff = 18.0f, + gasolineOneLiter = 0.99f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 29880.0f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 20425.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = 1521.67f, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = 3200.0f, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = 13.5f, + dataQuality = false + ), + // endregion + + // region City 3 + CityEntity( + cityName = "Malden", + country = "United States", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = null, + mealFor2PeopleMidRangeRestaurant = null, + mealAtMcDonaldSOrEquivalent = 7.5f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 4.5f, + cokePepsiAThirdOfLiterBottleInRestaurants = null, + waterAThirdOfLiterBottleInRestaurants = 2.0f, + milkRegularOneLiter = null, + waterOneAndHalfLiterBottleAtTheMarket = 1.33f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 4.92f, + banana1kg = 2.0f, + oranges1kg = 6.61f, + tomato1kg = 5.51f, + potato1kg = 5.51f, + onion1kg = 4.4f, + lettuceOneHead = 2.03f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = null, + riceWhite1kg = 6.17f, + eggsRegular12 = null, + localCheese1kg = 9.92f, + chickenFillets1kg = null, + beefRound1kgOrEquivalentBackLegRedMeat = null + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 221.47f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = null, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 67.8f, + fitnessClubMonthlyFeeForOneAdult = null, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 12.0f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = null, + internationalPrimarySchoolYearlyForOneChild = 5000.0f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 51.66f, + oneSummerDressInAChainStoreZaraHAndM = 50.0f, + onePairOfNikeRunningShoesMidRange = 69.99f, + onePairOfMenLeatherBusinessShoes = 104.67f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 2.5f, + monthlyPassRegularPrice = 84.0f, + taxiStartNormalTariff = null, + taxi1kmNormalTariff = null, + taxi1hourWaitingNormalTariff = null, + gasolineOneLiter = null + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = null, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 20000.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = 10763.91f, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 6458.35f + ), + averageMonthlyNetSalaryAfterTax = 14.9f, + dataQuality = false + ), + // endregion + + // region City 4 + CityEntity( + cityName = "Pearl", + country = "United States", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = null, + mealFor2PeopleMidRangeRestaurant = null, + mealAtMcDonaldSOrEquivalent = 10.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 5.25f, + cokePepsiAThirdOfLiterBottleInRestaurants = null, + waterAThirdOfLiterBottleInRestaurants = 1.44f, + milkRegularOneLiter = 2.38f, + waterOneAndHalfLiterBottleAtTheMarket = 2.08f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 5.91f, + banana1kg = 3.84f, + oranges1kg = 7.02f, + tomato1kg = 5.94f, + potato1kg = 4.95f, + onion1kg = 4.44f, + lettuceOneHead = 2.74f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 4.41f, + riceWhite1kg = 7.33f, + eggsRegular12 = null, + localCheese1kg = 12.13f, + chickenFillets1kg = null, + beefRound1kgOrEquivalentBackLegRedMeat = 26.46f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 251.16f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = null, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 68.12f, + fitnessClubMonthlyFeeForOneAdult = 60.0f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = null, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = null, + internationalPrimarySchoolYearlyForOneChild = null + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 47.55f, + oneSummerDressInAChainStoreZaraHAndM = 35.87f, + onePairOfNikeRunningShoesMidRange = 79.29f, + onePairOfMenLeatherBusinessShoes = null + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = null, + taxi1kmNormalTariff = null, + taxi1hourWaitingNormalTariff = null, + gasolineOneLiter = null + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = null, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 21105.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = 2000.0f, + apartmentOneBedroomOutsideOfCentre = 1750.0f, + apartment3BedroomsInCityCentre = 5000.0f, + apartment3BedroomsOutsideOfCentre = 4750.0f, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = 12.0f, + dataQuality = false + ), + + // endregion + + // region City 5 + CityEntity( + cityName = "Clayton", + country = "United States", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 10.0f, + mealFor2PeopleMidRangeRestaurant = 32.0f, + mealAtMcDonaldSOrEquivalent = 6.85f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 4.0f, + cokePepsiAThirdOfLiterBottleInRestaurants = null, + waterAThirdOfLiterBottleInRestaurants = 1.29f, + milkRegularOneLiter = 0.86f, + waterOneAndHalfLiterBottleAtTheMarket = 0.79f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 2.65f, + banana1kg = 1.34f, + oranges1kg = 1.2f, + tomato1kg = 2.43f, + potato1kg = 43f, + onion1kg = 1.94f, + lettuceOneHead = 1.5f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 2.48f, + riceWhite1kg = null, + eggsRegular12 = 2.4f, + localCheese1kg = null, + chickenFillets1kg = null, + beefRound1kgOrEquivalentBackLegRedMeat = 12.13f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 132.0f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = null, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 68.33f, + fitnessClubMonthlyFeeForOneAdult = null, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 11.25f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = null, + internationalPrimarySchoolYearlyForOneChild = null + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = null, + oneSummerDressInAChainStoreZaraHAndM = null, + onePairOfNikeRunningShoesMidRange = 70.0f, + onePairOfMenLeatherBusinessShoes = null + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = null, + taxi1kmNormalTariff = null, + taxi1hourWaitingNormalTariff = null, + gasolineOneLiter = 1.07f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = null, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 22000.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = 1300.0f, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 2690.98f + ), + averageMonthlyNetSalaryAfterTax = 500f, + dataQuality = false + ), + + // endregion + + // region City 6 + CityEntity( + cityName = "Brevard", + country = "United States", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 15.0f, + mealFor2PeopleMidRangeRestaurant = 45.0f, + mealAtMcDonaldSOrEquivalent = 7.75f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 4.79f, + cokePepsiAThirdOfLiterBottleInRestaurants = 1.5f, + waterAThirdOfLiterBottleInRestaurants = 1.79f, + milkRegularOneLiter = 2.07f, + waterOneAndHalfLiterBottleAtTheMarket = 1.92f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 3.72f, + banana1kg = 1.26f, + oranges1kg = 4.23f, + tomato1kg = 5.49f, + potato1kg = 4.35f, + onion1kg = 3.17f, + lettuceOneHead = 2.22f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 2.6f, + riceWhite1kg = 3.56f, + eggsRegular12 = 2.59f, + localCheese1kg = 14.7f, + chickenFillets1kg = 11.02f, + beefRound1kgOrEquivalentBackLegRedMeat = 13.0f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 118.5f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = null, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 68.33f, + fitnessClubMonthlyFeeForOneAdult = 60.0f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 10.69f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = null, + internationalPrimarySchoolYearlyForOneChild = null + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 54.5f, + oneSummerDressInAChainStoreZaraHAndM = 50.5f, + onePairOfNikeRunningShoesMidRange = 78.33f, + onePairOfMenLeatherBusinessShoes = 141.67f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = null, + taxi1kmNormalTariff = null, + taxi1hourWaitingNormalTariff = null, + gasolineOneLiter = 1.11f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = null, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 23750.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = 1300.0f, + apartmentOneBedroomOutsideOfCentre = 975.0f, + apartment3BedroomsInCityCentre = 1700.0f, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = 600f, + dataQuality = false + ), + // endregion + + // region City 7 + CityEntity( + cityName = "Woodlawn", + country = "United States", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 11.0f, + mealFor2PeopleMidRangeRestaurant = 60.0f, + mealAtMcDonaldSOrEquivalent = 8.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 3.2f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.33f, + waterAThirdOfLiterBottleInRestaurants = 1.5f, + milkRegularOneLiter = 1.1f, + waterOneAndHalfLiterBottleAtTheMarket = 1.85f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 4.03f, + banana1kg = 1.57f, + oranges1kg = 4.65f, + tomato1kg = 3.64f, + potato1kg = 2.69f, + onion1kg = 2.2f, + lettuceOneHead = 1.73f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 1.74f, + riceWhite1kg = 3.38f, + eggsRegular12 = 1.79f, + localCheese1kg = 7.27f, + chickenFillets1kg = 4.39f, + beefRound1kgOrEquivalentBackLegRedMeat = 11.02f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 122.31f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.03f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 68.33f, + fitnessClubMonthlyFeeForOneAdult = null, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 13.25f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 800.0f, + internationalPrimarySchoolYearlyForOneChild = 5000.0f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 46.5f, + oneSummerDressInAChainStoreZaraHAndM = 26.25f, + onePairOfNikeRunningShoesMidRange = 59.6f, + onePairOfMenLeatherBusinessShoes = 76.67f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 2.0f, + taxi1kmNormalTariff = 1.23f, + taxi1hourWaitingNormalTariff = 20.0f, + gasolineOneLiter = 1.16f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 25500.0f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 23666.67f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = 1000f, + dataQuality = false + ), + // endregion + + // region City 8 + CityEntity( + cityName = "Brookdale", + country = "United States", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = null, + mealFor2PeopleMidRangeRestaurant = 50.0f, + mealAtMcDonaldSOrEquivalent = 8.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 5.0f, + cokePepsiAThirdOfLiterBottleInRestaurants = null, + waterAThirdOfLiterBottleInRestaurants = 1.27f, + milkRegularOneLiter = null, + waterOneAndHalfLiterBottleAtTheMarket = 1.87f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 4.4f, + banana1kg = 1.97f, + oranges1kg = 2.85f, + tomato1kg = 2.58f, + potato1kg = 1.42f, + onion1kg = 1.96f, + lettuceOneHead = 1.5f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = null, + riceWhite1kg = 5.5f, + eggsRegular12 = null, + localCheese1kg = 12.0f, + chickenFillets1kg = null, + beefRound1kgOrEquivalentBackLegRedMeat = null + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 158.47f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = null, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 68.33f, + fitnessClubMonthlyFeeForOneAdult = null, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 11.75f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = null, + internationalPrimarySchoolYearlyForOneChild = null + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 45.0f, + oneSummerDressInAChainStoreZaraHAndM = 37.5f, + onePairOfNikeRunningShoesMidRange = 65.0f, + onePairOfMenLeatherBusinessShoes = 95.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = null, + taxi1kmNormalTariff = null, + taxi1hourWaitingNormalTariff = null, + gasolineOneLiter = null + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = null, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = null + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = 2690.98f, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 2690.98f + ), + averageMonthlyNetSalaryAfterTax = 1000f, + dataQuality = false + ), + + // endregion + + // region City 9 + CityEntity( + cityName = "Christiansburg", + country = "United States", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 13.0f, + mealFor2PeopleMidRangeRestaurant = 45.0f, + mealAtMcDonaldSOrEquivalent = 7.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 3.77f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.0f, + waterAThirdOfLiterBottleInRestaurants = 1.34f, + milkRegularOneLiter = 0.91f, + waterOneAndHalfLiterBottleAtTheMarket = 2.08f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 4.55f, + banana1kg = 2.7f, + oranges1kg = 4.62f, + tomato1kg = 3.04f, + potato1kg = 1.76f, + onion1kg = 2.89f, + lettuceOneHead = 1.65f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 3.64f, + riceWhite1kg = 4.09f, + eggsRegular12 = 2.5f, + localCheese1kg = 10.71f, + chickenFillets1kg = 11.76f, + beefRound1kgOrEquivalentBackLegRedMeat = 13.04f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 162.37f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.22f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 68.37f, + fitnessClubMonthlyFeeForOneAdult = 15.0f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 12.0f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = null, + internationalPrimarySchoolYearlyForOneChild = 35000.0f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 35.0f, + oneSummerDressInAChainStoreZaraHAndM = 31.99f, + onePairOfNikeRunningShoesMidRange = 71.25f, + onePairOfMenLeatherBusinessShoes = 120.71f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 1.75f, + monthlyPassRegularPrice = 28.0f, + taxiStartNormalTariff = 2.5f, + taxi1kmNormalTariff = 1.09f, + taxi1hourWaitingNormalTariff = null, + gasolineOneLiter = 1.15f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 23500.0f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 23000.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = 800.0f, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = 3000f, + dataQuality = false + ), + + // endregion + + // region City 10 + CityEntity( + cityName = "Kernersville", + country = "United States", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 15.0f, + mealFor2PeopleMidRangeRestaurant = 60.0f, + mealAtMcDonaldSOrEquivalent = 7.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 3.77f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.0f, + waterAThirdOfLiterBottleInRestaurants = 1.34f, + milkRegularOneLiter = 0.89f, + waterOneAndHalfLiterBottleAtTheMarket = 2.0f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 4.92f, + banana1kg = 1.63f, + oranges1kg = 4.62f, + tomato1kg = 3.95f, + potato1kg = 2.99f, + onion1kg = 2.78f, + lettuceOneHead = 1.5f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 2.99f, + riceWhite1kg = 4.09f, + eggsRegular12 = 2.5f, + localCheese1kg = 8.07f, + chickenFillets1kg = 11.76f, + beefRound1kgOrEquivalentBackLegRedMeat = 13.65f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 149.11f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.22f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 68.37f, + fitnessClubMonthlyFeeForOneAdult = null, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 12.0f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 975.0f, + internationalPrimarySchoolYearlyForOneChild = 15125.0f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 40.75f, + oneSummerDressInAChainStoreZaraHAndM = 31.99f, + onePairOfNikeRunningShoesMidRange = 71.25f, + onePairOfMenLeatherBusinessShoes = 91.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 2.5f, + taxi1kmNormalTariff = 1.09f, + taxi1hourWaitingNormalTariff = 30.0f, + gasolineOneLiter = 1.15f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 23500.0f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 23166.67f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = 23f, + dataQuality = false + ), + // endregion + + // region City 11 + CityEntity( + cityName = "Airway Heights", + country = "United States", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 15.0f, + mealFor2PeopleMidRangeRestaurant = 77.5f, + mealAtMcDonaldSOrEquivalent = 10.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 5.17f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.86f, + waterAThirdOfLiterBottleInRestaurants = 2.0f, + milkRegularOneLiter = 0.79f, + waterOneAndHalfLiterBottleAtTheMarket = 1.7f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = null, + banana1kg = null, + oranges1kg = null, + tomato1kg = null, + potato1kg = null, + onion1kg = null, + lettuceOneHead = null + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 2.76f, + riceWhite1kg = 3.93f, + eggsRegular12 = 2.0f, + localCheese1kg = 12.61f, + chickenFillets1kg = 10.93f, + beefRound1kgOrEquivalentBackLegRedMeat = 13.21f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 225.31f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.06f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 68.4f, + fitnessClubMonthlyFeeForOneAdult = 65.0f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 13.0f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 300.0f, + internationalPrimarySchoolYearlyForOneChild = 19750.0f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 47.71f, + oneSummerDressInAChainStoreZaraHAndM = 36.67f, + onePairOfNikeRunningShoesMidRange = 86.86f, + onePairOfMenLeatherBusinessShoes = 94.57f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 3.0f, + monthlyPassRegularPrice = 60.0f, + taxiStartNormalTariff = 5.0f, + taxi1kmNormalTariff = 1.15f, + taxi1hourWaitingNormalTariff = 35.0f, + gasolineOneLiter = 1.27f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 18597.5f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 17300.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = 1300.0f, + apartmentOneBedroomOutsideOfCentre = 1300.0f, + apartment3BedroomsInCityCentre = 1800.0f, + apartment3BedroomsOutsideOfCentre = 1800.0f, + pricePerSquareMeterToBuyApartmentInCityCentre = 6070.85f, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 4886.82f + ), + averageMonthlyNetSalaryAfterTax = 13f, + dataQuality = false + ), + // endregion + + // region City 12 + CityEntity( + cityName = "Airway Heights", + country = "United States", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 15.0f, + mealFor2PeopleMidRangeRestaurant = 77.5f, + mealAtMcDonaldSOrEquivalent = 10.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 5.17f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.86f, + waterAThirdOfLiterBottleInRestaurants = 2.0f, + milkRegularOneLiter = 0.79f, + waterOneAndHalfLiterBottleAtTheMarket = 1.7f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 12.0f, + banana1kg = 24f, + oranges1kg = 34f, + tomato1kg = 23f, + potato1kg = 53f, + onion1kg = 42f, + lettuceOneHead = 53f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 2.76f, + riceWhite1kg = 3.93f, + eggsRegular12 = 2.0f, + localCheese1kg = 12.61f, + chickenFillets1kg = 10.93f, + beefRound1kgOrEquivalentBackLegRedMeat = 13.21f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 225.31f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.06f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 68.4f, + fitnessClubMonthlyFeeForOneAdult = 65.0f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 13.0f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 300.0f, + internationalPrimarySchoolYearlyForOneChild = 19750.0f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 47.71f, + oneSummerDressInAChainStoreZaraHAndM = 36.67f, + onePairOfNikeRunningShoesMidRange = 86.86f, + onePairOfMenLeatherBusinessShoes = 94.57f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 3.0f, + monthlyPassRegularPrice = 60.0f, + taxiStartNormalTariff = 5.0f, + taxi1kmNormalTariff = 1.15f, + taxi1hourWaitingNormalTariff = 35.0f, + gasolineOneLiter = 1.27f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 18597.5f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 17300.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = 1300.0f, + apartmentOneBedroomOutsideOfCentre = 1300.0f, + apartment3BedroomsInCityCentre = 1800.0f, + apartment3BedroomsOutsideOfCentre = 1800.0f, + pricePerSquareMeterToBuyApartmentInCityCentre = 6070.85f, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 4886.82f + ), + averageMonthlyNetSalaryAfterTax = null, + dataQuality = false + ), + // endregion + + // region City 13 + CityEntity( + cityName = "Airway Heights", + country = "United States", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 15.0f, + mealFor2PeopleMidRangeRestaurant = 77.5f, + mealAtMcDonaldSOrEquivalent = 10.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 5.17f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.86f, + waterAThirdOfLiterBottleInRestaurants = 2.0f, + milkRegularOneLiter = 0.79f, + waterOneAndHalfLiterBottleAtTheMarket = 1.7f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 0f, + banana1kg = 0f, + oranges1kg = 0f, + tomato1kg = 0f, + potato1kg = 0f, + onion1kg = 0f, + lettuceOneHead = 0f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 2.76f, + riceWhite1kg = 3.93f, + eggsRegular12 = 2.0f, + localCheese1kg = 12.61f, + chickenFillets1kg = 10.93f, + beefRound1kgOrEquivalentBackLegRedMeat = 13.21f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 225.31f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.06f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 68.4f, + fitnessClubMonthlyFeeForOneAdult = 65.0f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 13.0f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 300.0f, + internationalPrimarySchoolYearlyForOneChild = 19750.0f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 47.71f, + oneSummerDressInAChainStoreZaraHAndM = 36.67f, + onePairOfNikeRunningShoesMidRange = 86.86f, + onePairOfMenLeatherBusinessShoes = 94.57f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 3.0f, + monthlyPassRegularPrice = 60.0f, + taxiStartNormalTariff = 5.0f, + taxi1kmNormalTariff = 1.15f, + taxi1hourWaitingNormalTariff = 35.0f, + gasolineOneLiter = 1.27f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 18597.5f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 17300.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = 1300.0f, + apartmentOneBedroomOutsideOfCentre = 1300.0f, + apartment3BedroomsInCityCentre = 1800.0f, + apartment3BedroomsOutsideOfCentre = 1800.0f, + pricePerSquareMeterToBuyApartmentInCityCentre = 6070.85f, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 4886.82f + ), + averageMonthlyNetSalaryAfterTax = 0f, + dataQuality = false + ) + // endregion + ) + } +} + + + + + + + + diff --git a/src/test/kotlin/data/InvalidFakeData.kt b/src/test/kotlin/data/InvalidFakeData.kt new file mode 100644 index 000000000..7d3a1aeca --- /dev/null +++ b/src/test/kotlin/data/InvalidFakeData.kt @@ -0,0 +1,93 @@ +package data + +import interactor.CostOfLivingDataSource +import model.* + + +object InvalidFakeData : CostOfLivingDataSource { + + override fun getAllCitiesData(): List { + return listOf( + CityEntity( + cityName = " ", + country = " ", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = null, + mealFor2PeopleMidRangeRestaurant = null, + mealAtMcDonaldSOrEquivalent = null + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = null, + cokePepsiAThirdOfLiterBottleInRestaurants = null, + waterAThirdOfLiterBottleInRestaurants = null, + milkRegularOneLiter = null, + waterOneAndHalfLiterBottleAtTheMarket = null + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = null, + banana1kg = null, + oranges1kg = null, + tomato1kg = null, + potato1kg = null, + onion1kg = null, + lettuceOneHead = null + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = null, + riceWhite1kg = null, + eggsRegular12 = null, + localCheese1kg = null, + chickenFillets1kg = null, + beefRound1kgOrEquivalentBackLegRedMeat = null + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = null, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = null, + internet60MbpsOrMoreUnlimitedDataCableAdsl = null, + fitnessClubMonthlyFeeForOneAdult = null, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = null, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = null, + internationalPrimarySchoolYearlyForOneChild = null + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = null, + oneSummerDressInAChainStoreZaraHAndM = null, + onePairOfNikeRunningShoesMidRange = null, + onePairOfMenLeatherBusinessShoes = null + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = null, + taxi1kmNormalTariff = null, + taxi1hourWaitingNormalTariff = null, + gasolineOneLiter = null + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = null, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 21105.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = null, + dataQuality = false + ) + ) + + } +} + + + + + + + + diff --git a/src/test/kotlin/data/ManagerExpectationsFakeData.kt b/src/test/kotlin/data/ManagerExpectationsFakeData.kt new file mode 100644 index 000000000..95a0dfd01 --- /dev/null +++ b/src/test/kotlin/data/ManagerExpectationsFakeData.kt @@ -0,0 +1,374 @@ +package data + +import interactor.CostOfLivingDataSource +import model.* + + +class ManagerExpectationsFakeData : CostOfLivingDataSource { + override fun getAllCitiesData(): List { + return listOf( + CityEntity( + cityName = "Great Falls", + country = "United States", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 15.0f, + mealFor2PeopleMidRangeRestaurant = 40.0f, + mealAtMcDonaldSOrEquivalent = 9.5f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 4.5f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.02f, + waterAThirdOfLiterBottleInRestaurants = 1.71f, + milkRegularOneLiter = 1.02f, + waterOneAndHalfLiterBottleAtTheMarket = 1.86f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 4.41f, + banana1kg = 1.58f, + oranges1kg = 3.93f, + tomato1kg = 4.41f, + potato1kg = 1.65f, + onion1kg = 2.08f, + lettuceOneHead = 1.25f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 2.95f, + riceWhite1kg = 4.12f, + eggsRegular12 = 3.25f, + localCheese1kg = 9.92f, + chickenFillets1kg = 11.01f, + beefRound1kgOrEquivalentBackLegRedMeat = 13.23f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 145.61f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.15f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 65.83f, + fitnessClubMonthlyFeeForOneAdult = null, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 10.0f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 2500.0f, + internationalPrimarySchoolYearlyForOneChild = 75000.0f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 51.25f, + oneSummerDressInAChainStoreZaraHAndM = 27.5f, + onePairOfNikeRunningShoesMidRange = 70.0f, + onePairOfMenLeatherBusinessShoes = 120.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 1.5f, + monthlyPassRegularPrice = 55.0f, + taxiStartNormalTariff = 9.5f, + taxi1kmNormalTariff = 1.46f, + taxi1hourWaitingNormalTariff = 25.0f, + gasolineOneLiter = 1.44f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 31000.0f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 23000.0f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = 750.0f, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = 1600.0f, + apartment3BedroomsOutsideOfCentre = 2250.0f, + pricePerSquareMeterToBuyApartmentInCityCentre = 2583.34f, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 7965.29f + ), + averageMonthlyNetSalaryAfterTax = 1000.0f, + dataQuality = false + ), CityEntity( + cityName = "Roseburg", + country = "United States", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 15.0f, + mealFor2PeopleMidRangeRestaurant = 60.0f, + mealAtMcDonaldSOrEquivalent = 8.0f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 4.49f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.22f, + waterAThirdOfLiterBottleInRestaurants = 1.26f, + milkRegularOneLiter = 0.98f, + waterOneAndHalfLiterBottleAtTheMarket = 1.0f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 2.3f, + banana1kg = 0.99f, + oranges1kg = 2.2f, + tomato1kg = 1.1f, + potato1kg = 1.71f, + onion1kg = 1.62f, + lettuceOneHead = 1.83f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 3.04f, + riceWhite1kg = 2.2f, + eggsRegular12 = 1.69f, + localCheese1kg = 12.9f, + chickenFillets1kg = 16.17f, + beefRound1kgOrEquivalentBackLegRedMeat = 12.49f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 100.0f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.25f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 55.0f, + fitnessClubMonthlyFeeForOneAdult = 50.0f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 12.5f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 921.42f, + internationalPrimarySchoolYearlyForOneChild = 8950.0f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 41.67f, + oneSummerDressInAChainStoreZaraHAndM = 25.0f, + onePairOfNikeRunningShoesMidRange = 63.33f, + onePairOfMenLeatherBusinessShoes = 50.0f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 2.0f, + monthlyPassRegularPrice = 20.0f, + taxiStartNormalTariff = 3.0f, + taxi1kmNormalTariff = 1.86f, + taxi1hourWaitingNormalTariff = 15.0f, + gasolineOneLiter = 1.36f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 20000.0f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 22328.2f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = 1300.0f, + apartmentOneBedroomOutsideOfCentre = 1475.0f, + apartment3BedroomsInCityCentre = 2350.0f, + apartment3BedroomsOutsideOfCentre = 2625.0f, + pricePerSquareMeterToBuyApartmentInCityCentre = 1883.68f, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 1614.59f + ), + averageMonthlyNetSalaryAfterTax = 1200.0f, + dataQuality = false + ), + CityEntity( + cityName = "Moose Jaw", + country = "Canada", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 14.82f, + mealFor2PeopleMidRangeRestaurant = 55.59f, + mealAtMcDonaldSOrEquivalent = 8.89f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 3.29f, + cokePepsiAThirdOfLiterBottleInRestaurants = 2.16f, + waterAThirdOfLiterBottleInRestaurants = 1.65f, + milkRegularOneLiter = 1.48f, + waterOneAndHalfLiterBottleAtTheMarket = 1.98f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 3.15f, + banana1kg = 1.06f, + oranges1kg = 2.96f, + tomato1kg = 2.88f, + potato1kg = 1.91f, + onion1kg = 1.74f, + lettuceOneHead = 2.22f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 1.91f, + riceWhite1kg = 1.63f, + eggsRegular12 = 3.19f, + localCheese1kg = 10.28f, + chickenFillets1kg = 8.17f, + beefRound1kgOrEquivalentBackLegRedMeat = 10.93f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 154.9f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.19f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 54.66f, + fitnessClubMonthlyFeeForOneAdult = 55.59f, + tennisCourtRentOneHourOnWeekend = 48.17f, + cinemaInternationalReleaseOneSeat = 7.41f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 567.6f, + internationalPrimarySchoolYearlyForOneChild = 7893.24f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 29.65f, + oneSummerDressInAChainStoreZaraHAndM = 25.94f, + onePairOfNikeRunningShoesMidRange = 79.67f, + onePairOfMenLeatherBusinessShoes = 101.91f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 0.93f, + monthlyPassRegularPrice = 29.65f, + taxiStartNormalTariff = 2.59f, + taxi1kmNormalTariff = 0.56f, + taxi1hourWaitingNormalTariff = 22.23f, + gasolineOneLiter = 1.35f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 20752.19f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 20011.04f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = null, + apartmentOneBedroomOutsideOfCentre = null, + apartment3BedroomsInCityCentre = null, + apartment3BedroomsOutsideOfCentre = null, + pricePerSquareMeterToBuyApartmentInCityCentre = null, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = null + ), + averageMonthlyNetSalaryAfterTax = 1185.84f, + dataQuality = false + ), CityEntity( + cityName = "Chetumal", + country = "Mexico", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 12.56f, + mealFor2PeopleMidRangeRestaurant = 23.21f, + mealAtMcDonaldSOrEquivalent = 5.06f + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 2.84f, + cokePepsiAThirdOfLiterBottleInRestaurants = 0.71f, + waterAThirdOfLiterBottleInRestaurants = 0.61f, + milkRegularOneLiter = 0.89f, + waterOneAndHalfLiterBottleAtTheMarket = 0.72f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 2.84f, + banana1kg = 1.03f, + oranges1kg = 1.37f, + tomato1kg = 1.55f, + potato1kg = 1.42f, + onion1kg = 1.03f, + lettuceOneHead = 0.93f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 1.55f, + riceWhite1kg = 1.16f, + eggsRegular12 = 1.5f, + localCheese1kg = 4.13f, + chickenFillets1kg = 4.38f, + beefRound1kgOrEquivalentBackLegRedMeat = null + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = 99.25f, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.26f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 27.21f, + fitnessClubMonthlyFeeForOneAdult = 18.05f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 3.09f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 61.88f, + internationalPrimarySchoolYearlyForOneChild = null + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 41.26f, + oneSummerDressInAChainStoreZaraHAndM = 36.1f, + onePairOfNikeRunningShoesMidRange = 77.35f, + onePairOfMenLeatherBusinessShoes = 51.57f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = 0.57f, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 1.24f, + taxi1kmNormalTariff = 1.29f, + taxi1hourWaitingNormalTariff = 3.48f, + gasolineOneLiter = 1.11f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = 21246.42f, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 16759.92f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = 198.49f, + apartmentOneBedroomOutsideOfCentre = 126.98f, + apartment3BedroomsInCityCentre = 398.77f, + apartment3BedroomsOutsideOfCentre = 326.44f, + pricePerSquareMeterToBuyApartmentInCityCentre = 626.31f, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 309.41f + ), + averageMonthlyNetSalaryAfterTax = 257.84f, + dataQuality = false + ), + CityEntity( + cityName = "Kuysinjaq", + country = "Iraq", + mealsPrices = MealsPrices( + mealInexpensiveRestaurant = 2.06f, + mealFor2PeopleMidRangeRestaurant = 10.96f, + mealAtMcDonaldSOrEquivalent = null + ), + drinksPrices = DrinksPrices( + cappuccinoRegularInRestaurants = 1.37f, + cokePepsiAThirdOfLiterBottleInRestaurants = 0.34f, + waterAThirdOfLiterBottleInRestaurants = 0.17f, + milkRegularOneLiter = 1.03f, + waterOneAndHalfLiterBottleAtTheMarket = 0.34f + ), + fruitAndVegetablesPrices = FruitAndVegetablesPrices( + apples1kg = 0.69f, + banana1kg = 1.03f, + oranges1kg = 1.03f, + tomato1kg = 0.51f, + potato1kg = 0.51f, + onion1kg = 0.51f, + lettuceOneHead = 0.34f + ), + foodPrices = FoodPrices( + loafOfFreshWhiteBread500g = 0.69f, + riceWhite1kg = 1.03f, + eggsRegular12 = 1.37f, + localCheese1kg = 6.85f, + chickenFillets1kg = 3.43f, + beefRound1kgOrEquivalentBackLegRedMeat = 8.22f + ), + servicesPrices = ServicesPrices( + basicElectricityHeatingCoolingWaterGarbageFor85m2Apartment = null, + oneMinOfPrepaidMobileTariffLocalNoDiscountsOrPlans = 0.06f, + internet60MbpsOrMoreUnlimitedDataCableAdsl = 34.26f, + fitnessClubMonthlyFeeForOneAdult = 13.7f, + tennisCourtRentOneHourOnWeekend = null, + cinemaInternationalReleaseOneSeat = 10.28f, + preschoolOrKindergartenFullDayPrivateMonthlyForOneChild = 57.1f, + internationalPrimarySchoolYearlyForOneChild = 1027.75f + ), + clothesPrices = ClothesPrices( + onePairOfJeansLevis50oneOrSimilar = 13.7f, + oneSummerDressInAChainStoreZaraHAndM = 17.13f, + onePairOfNikeRunningShoesMidRange = null, + onePairOfMenLeatherBusinessShoes = 17.13f + ), + transportationsPrices = TransportationsPrices( + oneWayTicketLocalTransport = null, + monthlyPassRegularPrice = null, + taxiStartNormalTariff = 1.37f, + taxi1kmNormalTariff = 0.69f, + taxi1hourWaitingNormalTariff = 3.43f, + gasolineOneLiter = 0.62f + ), + carsPrices = CarsPrices( + volkswagenGolf_1_4_90kwTrendLineOrEquivalentNewCar = null, + toyotaCorollaSedan_1_6l_97kwComfortOrEquivalentNewCar = 16444.04f + ), + realEstatesPrices = RealEstatesPrices( + apartmentOneBedroomInCityCentre = 137.03f, + apartmentOneBedroomOutsideOfCentre = 102.78f, + apartment3BedroomsInCityCentre = 205.55f, + apartment3BedroomsOutsideOfCentre = 171.29f, + pricePerSquareMeterToBuyApartmentInCityCentre = 342.58f, + pricePerSquareMeterToBuyApartmentOutsideOfCentre = 137.03f + ), + averageMonthlyNetSalaryAfterTax = 411.1f, + dataQuality = false + ) + ) + + } +} + + + + + + + + diff --git a/src/test/kotlin/interactor/GetAverageFruitAndVegetablesInteractorTest.kt b/src/test/kotlin/interactor/GetAverageFruitAndVegetablesInteractorTest.kt new file mode 100644 index 000000000..07c08ea3b --- /dev/null +++ b/src/test/kotlin/interactor/GetAverageFruitAndVegetablesInteractorTest.kt @@ -0,0 +1,127 @@ +package interactor + +import data.EmptyFakeData +import data.FruitsAndVegetablesFakeData +import data.InvalidFakeData +import org.junit.jupiter.api.Assertions.* +import org.junit.jupiter.api.BeforeEach +import org.junit.jupiter.api.Test +import org.junit.jupiter.api.TestInstance +import org.junit.jupiter.api.function.Executable + +@TestInstance(TestInstance.Lifecycle.PER_CLASS) +class GetAverageFruitAndVegetablesInteractorTest { + + private lateinit var getAverageFruitAndVegetablesInteractor: GetAverageFruitAndVegetablesInteractor + private val fakeData = FruitsAndVegetablesFakeData() + + @BeforeEach + fun setup() { + getAverageFruitAndVegetablesInteractor = GetAverageFruitAndVegetablesInteractor(fakeData) + } + + @Test + fun `should return correct cities names when the data source is valid`() { + // given a limit of cities + val limit = 10 + + // when check and return cities name + val result = getAverageFruitAndVegetablesInteractor(limit) + + // then asserted the return and the expected + val expected = listOf( + "Christiansburg", + "Brookdale", + "Woodlawn", + "Brevard", + "Clayton", + "Kernersville", + "Keller", + "Malden", + "Pearl", + "Moncks Corner" + ) + assertEquals(expected, result) + } + + @Test + fun `should return empty list when given the data source is Invalid`() { + // given a limit of cities and invalid data source + val limit = 10 + + getAverageFruitAndVegetablesInteractor = GetAverageFruitAndVegetablesInteractor(InvalidFakeData) + + // when check and return empty list + val result = getAverageFruitAndVegetablesInteractor(limit) + + val expected = emptyList() + // then asserted the return and the expected + assertEquals(expected, result) + } + + @Test + fun `should return empty list when given the data source is empty`() { + // given a limit of cities and invalid data source + val limit = 10 + + getAverageFruitAndVegetablesInteractor = GetAverageFruitAndVegetablesInteractor(EmptyFakeData) + + // when check and return empty list + val result = getAverageFruitAndVegetablesInteractor(limit) + + val expected = emptyList() + // then asserted the return and the expected + assertEquals(expected, result) + } + + @Test + fun `should return an empty list when given a limit zero`() { + // given a limit zero + val limit = 0 + + // when check and return empty list + val result = getAverageFruitAndVegetablesInteractor(limit) + + val expected = emptyList() + + // then asserted the return and the expected + assertEquals(expected, result) + } + + @Test + fun `should throw an exception when given a negative limit number`() { + // given a limit negative number + val limit = -1 + + // when check and throw exception + val result = Executable { getAverageFruitAndVegetablesInteractor(limit) } + + // then asserted the return and the expected + assertThrows(IllegalArgumentException::class.java, result) + } + + @Test + fun `should Return false when the fruits and vegetables is Null but salary is valid`() { + // given a null for fruits and vegetables but valid for salaries + val city = FruitsAndVegetablesFakeData().getAllCitiesData()[10] + + // when check + val result = getAverageFruitAndVegetablesInteractor.excludeNullFruitVegPriceAndNullSalaries(city) + + // then asserted the return and the expected + assertFalse(result) + } + + @Test + fun `should Return false when the fruits and vegetables is valid but salary is null`() { + // given valid data for fruits and vegetables but null for salaries + val city = FruitsAndVegetablesFakeData().getAllCitiesData()[11] + + // when check + val result = getAverageFruitAndVegetablesInteractor.excludeNullFruitVegPriceAndNullSalaries(city) + + // then asserted the return and the expected + assertFalse(result) + } + +} \ No newline at end of file diff --git a/src/test/kotlin/interactor/GetBestCitiesForBuyingSoftDrinksInteractorTest.kt b/src/test/kotlin/interactor/GetBestCitiesForBuyingSoftDrinksInteractorTest.kt new file mode 100644 index 000000000..64ac79869 --- /dev/null +++ b/src/test/kotlin/interactor/GetBestCitiesForBuyingSoftDrinksInteractorTest.kt @@ -0,0 +1,109 @@ +package interactor + +import data.BestCityForSavingMoneyFakeData +import data.InvalidFakeData +import model.CityEntity +import org.junit.jupiter.api.Assertions.* +import org.junit.jupiter.api.BeforeAll +import org.junit.jupiter.api.Test +import org.junit.jupiter.api.TestInstance +import org.junit.jupiter.api.function.Executable + +@TestInstance(TestInstance.Lifecycle.PER_CLASS) +internal class GetBestCitiesForBuyingSoftDrinksInteractorTest { + + // region init + private lateinit var bestCitiesForBuyingSoftDrinks: GetBestCitiesForBuyingSoftDrinksInteractor + + @BeforeAll + fun setup() { + + bestCitiesForBuyingSoftDrinks = + GetBestCitiesForBuyingSoftDrinksInteractor(BestCityForSavingMoneyFakeData) + } + // endregion + + @Test + fun `should return true when the city has not null require values`() { + + // given + val data = BestCityForSavingMoneyFakeData.getAllCitiesData()[0] + val excludeNullRequireValues = + bestCitiesForBuyingSoftDrinks::class.java.getDeclaredMethod( + "excludeNullRequireValues", + CityEntity::class.java + ) + excludeNullRequireValues.isAccessible = true + + // when check if the output is true + val result = excludeNullRequireValues.invoke(bestCitiesForBuyingSoftDrinks, data) as Boolean + + // then check the result + assertTrue(result) + } + + @Test + fun `should return best three cities names when we pass the fake data`() { + + // Given a cities names and the names of returned cities + val bestThreeCitiesNames = BestCityForSavingMoneyFakeData.getAllCitiesData() + .filter { it.cityName != "Malden" } + + // when check if the two lists are the same + val namesOfReturnedCities = bestCitiesForBuyingSoftDrinks(3) + + // then check the result + assertEquals(bestThreeCitiesNames,namesOfReturnedCities) + } + + @Test + fun `should throw exception when the data is empty`() { + + // change data source to empty data + bestCitiesForBuyingSoftDrinks = + GetBestCitiesForBuyingSoftDrinksInteractor(BestCityForSavingMoneyFakeData.emptyData) + + // when the function throw exception + + val result = Executable { + bestCitiesForBuyingSoftDrinks(3) + } + + // then check the result + assertThrows(Exception::class.java, result) + } + + @Test + fun `should throw exception when the limit is below 1`() { + + // change data source to empty data + bestCitiesForBuyingSoftDrinks = + GetBestCitiesForBuyingSoftDrinksInteractor(BestCityForSavingMoneyFakeData) + + // when the function throw exception + + val result = Executable { + bestCitiesForBuyingSoftDrinks(0) + } + + // then check the result + assertThrows(Exception::class.java, result) + } + + @Test + fun `should throw exception when the data is invalid`() { + + // change data source to empty data + bestCitiesForBuyingSoftDrinks = + GetBestCitiesForBuyingSoftDrinksInteractor(InvalidFakeData) + + // when the function throw exception + + val result = Executable { + bestCitiesForBuyingSoftDrinks(3) + } + + // then check the result + assertThrows(Exception::class.java, result) + } +} \ No newline at end of file diff --git a/src/test/kotlin/interactor/GetBestCitiesToFashionShoppingInteractorTest.kt b/src/test/kotlin/interactor/GetBestCitiesToFashionShoppingInteractorTest.kt new file mode 100644 index 000000000..033e27052 --- /dev/null +++ b/src/test/kotlin/interactor/GetBestCitiesToFashionShoppingInteractorTest.kt @@ -0,0 +1,65 @@ +package interactor + +import data.FakeDataSource +import data.TestCase +import org.junit.jupiter.api.Test + +import org.junit.jupiter.api.Assertions.* +import org.junit.jupiter.api.BeforeAll +import org.junit.jupiter.api.TestInstance +import kotlin.test.assertEquals + +@TestInstance(TestInstance.Lifecycle.PER_CLASS) +class GetBestCitiesToFashionShoppingInteractorTest { + + private lateinit var getBestCitiesToFashionShopping: GetBestCitiesToFashionShoppingInteractor + private lateinit var fakeData: FakeDataSource + + @BeforeAll + fun setUp() { + fakeData = FakeDataSource() + getBestCitiesToFashionShopping = GetBestCitiesToFashionShoppingInteractor(fakeData) + + } + + @Test + fun should_returnCity_when_ValidData() { + // Given + fakeData.changeDataSource(TestCase.FashionShopping) + + // When + val countries = listOf("Sancti Spiritus", "Santiago de Cuba", "Santa Clara") + val result = getBestCitiesToFashionShopping.execute() + + // Then check the final result + assertEquals(countries, result) + } + + @Test + fun should_returnEmptyList_When_clothesPricesAreNull() { + // Given data clothes prices null + fakeData.changeDataSource(TestCase.InvalidData) + + // When return emptyList + val expected = emptyList() + val result = getBestCitiesToFashionShopping.execute() + + // Then check the final result + assertEquals(expected, result) + } + + + @Test + fun should_returnEmptyList_When_DataListEmpty() { + // Given data empty + fakeData.changeDataSource(TestCase.Empty) + + // When return emptyList + val expected = emptyList() + val result = getBestCitiesToFashionShopping.execute() + + // Then check the final result + assertEquals(expected, result) + } + +} \ No newline at end of file diff --git a/src/test/kotlin/interactor/GetBestCityForSavingMoneyInteractorTest.kt b/src/test/kotlin/interactor/GetBestCityForSavingMoneyInteractorTest.kt new file mode 100644 index 000000000..47b65c26b --- /dev/null +++ b/src/test/kotlin/interactor/GetBestCityForSavingMoneyInteractorTest.kt @@ -0,0 +1,70 @@ +package interactor + +import data.FakeDataSource +import data.TestCase +import model.CityEntity +import org.junit.jupiter.api.Assertions +import org.junit.jupiter.api.Test +import org.junit.jupiter.api.BeforeAll +import org.junit.jupiter.api.TestInstance + +@TestInstance(TestInstance.Lifecycle.PER_CLASS) +internal class GetBestCityForSavingMoneyInteractorTest { + + // region init + private lateinit var bestCityForSavingMoney: GetBestCityForSavingMoneyInteractor + private lateinit var fakeData: FakeDataSource + + @BeforeAll + fun setup() { + fakeData = FakeDataSource() + bestCityForSavingMoney = + GetBestCityForSavingMoneyInteractor(fakeData) + fakeData.changeDataSource(TestCase.BestCityForSavingMoney) + + } + // endregion + + @Test + fun should_ReturnTrue_When_TheCityHasNotNullRequireValues() { + + // given + val data = fakeData.getAllCitiesData()[0] + val excludeNullRequireValues = + bestCityForSavingMoney::class.java.getDeclaredMethod("excludeNullRequireValues", CityEntity::class.java) + excludeNullRequireValues.isAccessible = true + + // when check if the output is true + val result = excludeNullRequireValues.invoke(bestCityForSavingMoney, data) as Boolean + + // then check the result + Assertions.assertTrue(result) + } + + @Test + fun should_ReturnCity_When_ValidData() { + + // Given a city name and the name of returned city + val cityName = "Moncks Corner" + + // when + val nameOfReturnedCity = bestCityForSavingMoney().cityName + + // then check the result + Assertions.assertEquals(cityName, nameOfReturnedCity) + } + + @Test + fun should_ReturnFalse_When_WePassTheFakeData() { + + // Given a city name and the name of returned city + val cityName = "Cairo" + val nameOfReturnedCity = bestCityForSavingMoney().cityName + + // when check if the two names are the same + val areEqual = cityName == nameOfReturnedCity + + // then check the result + Assertions.assertFalse(areEqual) + } +} \ No newline at end of file diff --git a/src/test/kotlin/interactor/GetCitiesAverageSalaryTest.kt b/src/test/kotlin/interactor/GetCitiesAverageSalaryTest.kt new file mode 100644 index 000000000..479f05e2d --- /dev/null +++ b/src/test/kotlin/interactor/GetCitiesAverageSalaryTest.kt @@ -0,0 +1,90 @@ +package interactor + +import data.FakeDataSource +import data.TestCase +import org.junit.jupiter.api.Test +import org.junit.jupiter.api.Assertions.* +import org.junit.jupiter.api.BeforeAll +import org.junit.jupiter.api.TestInstance +import org.junit.jupiter.api.function.Executable + +@TestInstance(TestInstance.Lifecycle.PER_CLASS) +internal class GetCitiesAverageSalaryTest { + + private lateinit var getCitiesAverageSalary: GetCitiesAverageSalary + private lateinit var fakeData: FakeDataSource + + @BeforeAll + fun setUp() { + fakeData = FakeDataSource() + getCitiesAverageSalary = GetCitiesAverageSalary(fakeData) + fakeData.changeDataSource(TestCase.CitiesAverageSalary) + + } + + @Test + fun should_ReturnCitiesWithAverageSalary_When_InputLowerCaseCountry() { + //given a lower case country + val country = "cuba" + + //when calculate the average salary of city + val result = getCitiesAverageSalary.execute(country) + + //then check the result + val fakeList = listOf(Pair("Santa Clara", 25.0)) + assertEquals(fakeList, result) + } + + @Test + fun should_ReturnCitiesWithAverageSalary_When_InputUpperCaseCountry() { + //given an upper case country + val country = "CUBA" + + //when calculate the average salary of city + val result = getCitiesAverageSalary.execute(country) + + //then check the result + val fakeList = listOf(Pair("Santa Clara", 25.0)) + assertEquals(fakeList, result) + } + + @Test + fun should_ReturnCitiesWithAverageSalary_When_InputUpperCaseAndLowerCaseCountry() { + //given an upperCase and lowercase country + val country = "Cuba" + + //when calculate the average salary of city + val result = getCitiesAverageSalary.execute(country) + + //then check the result + val fakeList = listOf(Pair("Santa Clara", 25.0)) + assertEquals(fakeList, result) + } + + @Test + fun should_ReturnCorrectCities_when_TheDataQualityIsTrue() { + //given a country with true data quality + val country = "cuba" + + //when return the average cities salary + val result = getCitiesAverageSalary.execute(country) + + //then check the result + val fakeList = listOf(Pair("Santa Clara", 25.0)) + assertEquals(fakeList, result) + + } + + @Test + fun should_ReturnThrowException_When_InputWrong() { + //given a wrong name country + val country = "&&7#" + + //when calculate the average salary of city + val result = Executable { getCitiesAverageSalary.execute(country) } + + //then check the result + assertThrows(IllegalArgumentException::class.java, result) + } +} + diff --git a/src/test/kotlin/interactor/GetCitiesNamesWithCheapestBananaPricesInteractorTest.kt b/src/test/kotlin/interactor/GetCitiesNamesWithCheapestBananaPricesInteractorTest.kt new file mode 100644 index 000000000..1b329de61 --- /dev/null +++ b/src/test/kotlin/interactor/GetCitiesNamesWithCheapestBananaPricesInteractorTest.kt @@ -0,0 +1,167 @@ +package interactor + +import data.BananaCheapestFakeData +import data.BananaCheapestFakeData.citiesListOf +import data.BananaCheapestFakeData.makeCity +import data.EmptyFakeData +import data.InvalidFakeData +import model.* +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Assertions.assertThrows +import org.junit.jupiter.api.BeforeEach +import org.junit.jupiter.api.Test +import org.junit.jupiter.api.TestInstance +import org.junit.jupiter.api.function.Executable + +@TestInstance(TestInstance.Lifecycle.PER_CLASS) +internal class GetCitiesNamesWithCheapestBananaPricesInteractorTest { + // region init + private lateinit var getCitiesNamesWithCheapestBananaPrices: GetCitiesNamesWithCheapestBananaPricesInteractor + + @BeforeEach + fun setup() { + getCitiesNamesWithCheapestBananaPrices = GetCitiesNamesWithCheapestBananaPricesInteractor(BananaCheapestFakeData) + } + // endregion + + // region one city cases + @Test + fun `should throw illegal state exception when the data is invalid`() { + // change source of fake data to invalid data + getCitiesNamesWithCheapestBananaPrices = GetCitiesNamesWithCheapestBananaPricesInteractor(InvalidFakeData) + + // given one city included + val city = makeCity("Santiago de Cuba") + + // when the output is list of one city + val result = Executable { getCitiesNamesWithCheapestBananaPrices(city) } + + // then check + assertThrows(IllegalStateException::class.java, result) + } + @Test + fun `should throw illegal state exception when the data is empty`() { + // change source of fake data to empty data + getCitiesNamesWithCheapestBananaPrices = GetCitiesNamesWithCheapestBananaPricesInteractor(EmptyFakeData) + + // given one city included + val city = makeCity("Santiago de Cuba") + + // when the output is list of one city + val result = Executable { getCitiesNamesWithCheapestBananaPrices(city) } + + // then check + assertThrows(IllegalStateException::class.java, result) + } + + @Test + fun `should return one city when the input is one city included`() { + // given one city included + val city = makeCity("Santiago de Cuba") + + // when the output is list of one city + val result = getCitiesNamesWithCheapestBananaPrices(city) + + // then check + assertEquals(listOf("Santiago de Cuba"), result) + } + + @Test + fun `should throw illegal state exception when the input is one city not included`() { + // given one city is not included + val city = makeCity("Galaxy") + + // when the output is empty list of city + val result = Executable { getCitiesNamesWithCheapestBananaPrices(city) } + + // then check + assertThrows(IllegalStateException::class.java, result) + } + + @Test + fun `should return one city when the input is one city included in lowercase`() { + // given one city included + val city = makeCity("santiago de cuba") + + // when the output is list of one city + val result = getCitiesNamesWithCheapestBananaPrices(city) + + // then check + assertEquals(listOf("Santiago de Cuba"), result) + } + + @Test + fun `should return one city when the input is one city included in lowercase and more outer spaces`() { + // given one city included + val city = makeCity(" santiago de cuba ") + + // when the output is list of one city + val result = getCitiesNamesWithCheapestBananaPrices(city) + + // then check + assertEquals(listOf("Santiago de Cuba"), result) + } + // endregion + + // region multi city cases + @Test + fun `should return sorted list when the input is multi city all included`() { + // given multi city all of this is included + val cities = citiesListOf("Santiago de Cuba", "Sancti Spiritus") + + // when the output is list of sorted cities by Banana Price + val result = getCitiesNamesWithCheapestBananaPrices(*cities) + + // then check + assertEquals(listOf("Santiago de Cuba", "Sancti Spiritus"), result) + } + + @Test + fun `should return sorted list when the input is multi city all included in different cases`() { + // given multi city all of this is included + val cities = citiesListOf("SaNtiago de cuba", "sAncti spirItus") + + // when the output is list of sorted cities by Banana Price + val result = getCitiesNamesWithCheapestBananaPrices(*cities) + + // then check + assertEquals(listOf("Santiago de Cuba", "Sancti Spiritus"), result) + } + + @Test + fun `should return sorted list when the input is multi city some included`() { + // given multi city some of this is included + val cities = citiesListOf("Santiago de Cuba", "Sancti Spiritus", "Galaxy") + + // when the output is list of sorted cities by Banana Price + val result = getCitiesNamesWithCheapestBananaPrices(*cities) + + // then check + assertEquals(listOf("Santiago de Cuba", "Sancti Spiritus"), result) + } + + @Test + fun `should return sorted list when the input is multi city some included in different cases`() { + // given multi city some of this is included + val cities = citiesListOf("santiago de cuba", "Sancti Spiritus", "Galaxy") + + // when the output is list of sorted cities by Banana Price + val result = getCitiesNamesWithCheapestBananaPrices(*cities) + + // then check + assertEquals(listOf("Santiago de Cuba", "Sancti Spiritus"), result) + } + + @Test + fun `should throw illegal state exception when the input is multi city all not included`() { + // given multi city all of this is not included + val cities = citiesListOf("", "Farwala", "Galaxy") + + // when the output is empty list + val result = Executable { getCitiesNamesWithCheapestBananaPrices(*cities) } + + // then check + assertThrows(IllegalStateException::class.java, result) + } + // endregion +} \ No newline at end of file diff --git a/src/test/kotlin/interactor/GetCityHasCheapestInternetConnectionInteractorTest.kt b/src/test/kotlin/interactor/GetCityHasCheapestInternetConnectionInteractorTest.kt new file mode 100644 index 000000000..883af75e8 --- /dev/null +++ b/src/test/kotlin/interactor/GetCityHasCheapestInternetConnectionInteractorTest.kt @@ -0,0 +1,49 @@ +package interactor + +import data.CheapestInternetFakeData +import org.junit.jupiter.api.* +import org.junit.jupiter.api.Assertions.* +import org.junit.jupiter.api.function.Executable + + + +@TestInstance(TestInstance.Lifecycle.PER_CLASS) +internal class GetCityHasCheapestInternetConnectionInteractorTest { + + private lateinit var cityHasCheapestInternet: GetCityHasCheapestInternetConnectionInteractor + + @Test + fun `should return cheapest city when given list of cities`() { + // change source of fake data to valid salary and internet prices + cityHasCheapestInternet = GetCityHasCheapestInternetConnectionInteractor(CheapestInternetFakeData + .validSalaryAndInternetPrices) + val expectedCity = CheapestInternetFakeData.validSalaryAndInternetPrices.getAllCitiesData()[9] + // when check for the cheapest city in the list + val actual = cityHasCheapestInternet() + // then check the result + assertEquals(expectedCity, actual) + } + + @Test + fun `should return exception when all city has null internet price`() { + // change source of fake data to invalid data + cityHasCheapestInternet = GetCityHasCheapestInternetConnectionInteractor(CheapestInternetFakeData + .invalidData) + // when check for the cheapest city in the list + val actual = Executable { cityHasCheapestInternet() } + // then check the result + assertThrows(IllegalStateException::class.java, actual) + } + + @Test + fun `should return exception when given is empty fake data`() { + // change source of fake data to empty data + cityHasCheapestInternet = GetCityHasCheapestInternetConnectionInteractor(CheapestInternetFakeData + .emptyData) + // when check for the cheapest city in the list + val actual = Executable { cityHasCheapestInternet() } + // then check the result + assertThrows(IllegalStateException::class.java, actual) + } + +} \ No newline at end of file diff --git a/src/test/kotlin/interactor/GetCityThatMatchTheManagerExpectationsInteractorTest.kt b/src/test/kotlin/interactor/GetCityThatMatchTheManagerExpectationsInteractorTest.kt new file mode 100644 index 000000000..4eddc0b87 --- /dev/null +++ b/src/test/kotlin/interactor/GetCityThatMatchTheManagerExpectationsInteractorTest.kt @@ -0,0 +1,87 @@ +package interactor + +import data.FakeDataSource +import data.TestCase +import org.junit.jupiter.api.Test + +import org.junit.jupiter.api.Assertions.* +import org.junit.jupiter.api.BeforeAll +import org.junit.jupiter.api.TestInstance +import kotlin.test.assertEquals + +@TestInstance(TestInstance.Lifecycle.PER_CLASS) +class GetCityThatMatchTheManagerExpectationsInteractorTest { + + private lateinit var getCityThatMatchTheManagerExpectationsInteractor: GetCityThatMatchTheManagerExpectationsInteractor + private lateinit var fakeData: FakeDataSource + + @BeforeAll + fun setUp() { + fakeData = FakeDataSource() + getCityThatMatchTheManagerExpectationsInteractor = + GetCityThatMatchTheManagerExpectationsInteractor(fakeData) + fakeData.changeDataSource(TestCase.ManagerExpectations) + + } + + @Test + fun should_returnCity_when_allCountriesIncluded() { + // Given all countries included + val countries = listOf("united states", "canada", "mexico") + // When return the city that match manager expectations + val result = getCityThatMatchTheManagerExpectationsInteractor.execute(countries) + // Then check the final result + assertEquals("Chetumal", result?.cityName) + } + + @Test + fun should_returnCity_when_namesOfCountriesIsUpperCase() { + // Given all countries included and all names uppercase + val countries = listOf("UNITED STATES", "CANADA", "MEXICO") + // When return the city that match manager expectations + val result = getCityThatMatchTheManagerExpectationsInteractor.execute(countries) + // Then check the final result + assertEquals("Chetumal", result?.cityName) + } + + @Test + fun should_returnCity_when_namesOfCountriesIsMixedUpperCaseAndLowCase() { + // Given all countries included and all names mixed + val countries = listOf("UnItEd STaTeS", "CaNAdA", "MeXiCo") + // When return the city that match manager expectations + val result = getCityThatMatchTheManagerExpectationsInteractor.execute(countries) + // Then check the final result + assertEquals("Chetumal", result?.cityName) + } + + @Test + fun should_returnCity_when_notAllCountriesIncluded() { + // Given not all countries included + val countries = listOf("united states", "canada", "iraq") + // When return the city that match manager expectations + val result = getCityThatMatchTheManagerExpectationsInteractor.execute(countries) + // Then check the final result + assertEquals("Great Falls", result?.cityName) + } + + @Test + fun should_returnCity_when_allCountriesNotIncluded() { + // Given all countries not included + val countries = listOf("egypt", "syria", "iraq") + // When return empty result + val result = getCityThatMatchTheManagerExpectationsInteractor.execute(countries) + // Then check the final result + assertNull(null, result?.cityName) + } + + @Test + fun should_returnCity_when_namesOfCountriesIsEmpty() { + // Given all empty string instead of countries names + val countries = listOf("", "", "") + // When return empty result + val result = getCityThatMatchTheManagerExpectationsInteractor.execute(countries) + // Then check the final result + assertNull(null, result?.cityName) + } + +} \ No newline at end of file diff --git a/src/test/kotlin/interactor/GetCostlierCityInteractorTest.kt b/src/test/kotlin/interactor/GetCostlierCityInteractorTest.kt new file mode 100644 index 000000000..0f3d1f2af --- /dev/null +++ b/src/test/kotlin/interactor/GetCostlierCityInteractorTest.kt @@ -0,0 +1,61 @@ +package interactor + +import data.CostlierCityFakeData +import data.EmptyFakeData +import data.InvalidFakeData +import org.junit.jupiter.api.Assertions.* +import org.junit.jupiter.api.BeforeAll +import org.junit.jupiter.api.Test +import org.junit.jupiter.api.TestInstance +import org.junit.jupiter.api.function.Executable + +@TestInstance(TestInstance.Lifecycle.PER_CLASS) +internal class GetCostlierCityInteractorTest { + lateinit var getCostlierCityInteractor: + GetCostlierCityInteractor + + lateinit var fakeDataSource: CostlierCityFakeData + lateinit var emptyFakeData: EmptyFakeData + lateinit var invalidFakeData: InvalidFakeData + + + @BeforeAll + fun setup() { + fakeDataSource = CostlierCityFakeData() + emptyFakeData = EmptyFakeData() + invalidFakeData= InvalidFakeData() + } + + @Test + fun `should return correct city when the data is valid`() { + getCostlierCityInteractor = GetCostlierCityInteractor(fakeDataSource) + //when The result is one city + val city = getCostlierCityInteractor.execute() + //then check + assertEquals( "Seoul", city.cityName) + } + + @Test + fun `should return empty when the data is empty`() { + getCostlierCityInteractor = + GetCostlierCityInteractor(emptyFakeData) + //when The result is one city + val result = Executable { getCostlierCityInteractor.execute() } + //then check + assertThrows(Exception::class.java , result ) + + } + + @Test + fun `should throw exception when the data is inValid`() { + getCostlierCityInteractor = + GetCostlierCityInteractor(invalidFakeData) + //when The result is one city + val result = Executable { getCostlierCityInteractor.execute() } + //then check + assertThrows(Exception::class.java , result ) + } + + + +} \ No newline at end of file diff --git a/src/test/kotlin/interactor/GetTopCitiesHasCheapestPriceOfApartmentsAndCountOfYearToBuyTest.kt b/src/test/kotlin/interactor/GetTopCitiesHasCheapestPriceOfApartmentsAndCountOfYearToBuyTest.kt new file mode 100644 index 000000000..e38649107 --- /dev/null +++ b/src/test/kotlin/interactor/GetTopCitiesHasCheapestPriceOfApartmentsAndCountOfYearToBuyTest.kt @@ -0,0 +1,87 @@ +package interactor + +import data.* +import org.junit.jupiter.api.Test +import org.junit.jupiter.api.Assertions.* +import org.junit.jupiter.api.BeforeAll +import org.junit.jupiter.api.BeforeEach +import org.junit.jupiter.api.TestInstance +import java.lang.Exception + +@TestInstance(TestInstance.Lifecycle.PER_CLASS) +internal class GetTopCitiesHasCheapestPriceOfApartmentsAndCountOfYearToBuyTest { + + // region init + private lateinit var getTopCitiesHasCheapestPriceOfApartmentsAndYearInteractor: + GetTopCitiesHasCheapestPriceOfApartmentsAndYearInteractor + @BeforeEach + fun setup() { + getTopCitiesHasCheapestPriceOfApartmentsAndYearInteractor = + GetTopCitiesHasCheapestPriceOfApartmentsAndYearInteractor(CheapestApartmentsInCitiesFakeData) + } + // endregion + + + @Test + fun `should return list when the input salary`() { + + // when the output list of a pair of cities names and count of years + val result = + getTopCitiesHasCheapestPriceOfApartmentsAndYearInteractor(10) + + // expect list + val expectData=listOf( + Pair("Domyat", 20.0f), + Pair("Popeye Village", 66.66667f), + Pair("Hallstatt", 166.66667f), + Pair("Simiane La Rotonde", 266.66666f), + Pair("Cinque Terre", 300.0f), + Pair("Ortahisar", 333.33334f), + Pair("Oia", 400.0f), + Pair("Shirakawa-go", 500.0f), + Pair("Ait Ben-Haddou", 566.6667f), + Pair("Cua Van", 666.6667f), + ) + + // then check + assertEquals(expectData ,result) + } + + + @Test + fun `should throw exception when limit less than or equal zero`() { + // when the output list of a pair of cities names and count of years + val result = org.junit.jupiter.api.function.Executable { + getTopCitiesHasCheapestPriceOfApartmentsAndYearInteractor(0) + } + // then check + assertThrows(Exception::class.java, result) + } + + @Test + fun `should throw exception when data is invalid`() { + + getTopCitiesHasCheapestPriceOfApartmentsAndYearInteractor = + GetTopCitiesHasCheapestPriceOfApartmentsAndYearInteractor(InvalidFakeData) + // when the output list of a pair of cities names and count of years + val result = org.junit.jupiter.api.function.Executable { + getTopCitiesHasCheapestPriceOfApartmentsAndYearInteractor(10) + } + // then check + assertThrows(Exception::class.java, result) + } + + @Test + fun should_throwException_when_dataIsEmpty() { + getTopCitiesHasCheapestPriceOfApartmentsAndYearInteractor = + GetTopCitiesHasCheapestPriceOfApartmentsAndYearInteractor(EmptyFakeData) + // when the output list of a pair of cities names and count of years + val result = org.junit.jupiter.api.function.Executable { + getTopCitiesHasCheapestPriceOfApartmentsAndYearInteractor(0) + } + // then check + assertThrows(Exception::class.java, result) + } + + +} \ No newline at end of file diff --git a/src/test/kotlin/interactor/GetTopTenCountriesTaxesInteractorTest.kt b/src/test/kotlin/interactor/GetTopTenCountriesTaxesInteractorTest.kt new file mode 100644 index 000000000..0caf292e7 --- /dev/null +++ b/src/test/kotlin/interactor/GetTopTenCountriesTaxesInteractorTest.kt @@ -0,0 +1,38 @@ +package interactor + +import data.FakeDataSource +import data.TestCase +import org.junit.jupiter.api.BeforeAll +import org.junit.jupiter.api.Test +import org.junit.jupiter.api.TestInstance +import kotlin.test.assertEquals + + +@TestInstance(TestInstance.Lifecycle.PER_CLASS) +class GetTopTenCountriesTaxesInteractorTest { + + private lateinit var getTopTenCountriesTaxesInteractor : GetTopTenCountriesTaxesInteractor + private lateinit var fakeData : FakeDataSource + + @BeforeAll + fun setUp() { + fakeData = FakeDataSource() + getTopTenCountriesTaxesInteractor = + GetTopTenCountriesTaxesInteractor(fakeData) + fakeData.changeDataSource(TestCase.CountriesTaxes) + + } + + + @Test + fun should_ReturnCorrectList_When_TheDataIsValid() { + // when the result is correct list + val result = getTopTenCountriesTaxesInteractor.execute() + // then check + val expected : List> = + listOf(("Canada" to 2.16f), ("United States" to 2.12f), ("Mexico" to 0.71f), ("Iraq" to 0.34f)) + assertEquals(expected, result) + } + + +} \ No newline at end of file diff --git a/src/test/kotlin/interactor/plus/GetCitiesNameWithCheapestTennisPriceOnWeekendInteractorTest.kt b/src/test/kotlin/interactor/plus/GetCitiesNameWithCheapestTennisPriceOnWeekendInteractorTest.kt new file mode 100644 index 000000000..f41eed214 --- /dev/null +++ b/src/test/kotlin/interactor/plus/GetCitiesNameWithCheapestTennisPriceOnWeekendInteractorTest.kt @@ -0,0 +1,67 @@ +package interactor.plus + +import data.BananaCheapestFakeData +import data.EmptyFakeData +import data.InvalidFakeData +import org.junit.jupiter.api.Test +import org.junit.jupiter.api.Assertions.* +import org.junit.jupiter.api.BeforeEach +import org.junit.jupiter.api.TestInstance +import org.junit.jupiter.api.function.Executable + +@TestInstance(TestInstance.Lifecycle.PER_CLASS) +internal class GetCitiesNameWithCheapestTennisPriceOnWeekendInteractorTest { + private lateinit var getCitiesNameWithCheapestTennisPrice: GetCitiesNameWithCheapestTennisPriceOnWeekendInteractor + + @BeforeEach + fun setup() { + getCitiesNameWithCheapestTennisPrice = + GetCitiesNameWithCheapestTennisPriceOnWeekendInteractor(BananaCheapestFakeData) + } + + @Test + fun `should return correct 2 cities when the data is valid`() { + // given limit the return by 2 + val limit = 2 + val expectedCitiesNames = listOf("Santiago de Cuba", "Sancti Spiritus") + // when the actual result is 2 cities names + val result = getCitiesNameWithCheapestTennisPrice(limit) + // then check of the result + assertEquals(expectedCitiesNames, result) + } + + @Test + fun `should return correct list of 1 city name when the data is valid`() { + // given limit the return by 1 + val limit = 1 + val expectedCityName = listOf("Santiago de Cuba") + // when the actual result is list of 1 city name + val result = getCitiesNameWithCheapestTennisPrice(limit) + // then check of the result + assertEquals(expectedCityName, result) + } + + @Test + fun `should throw exception when the data is invalid`() { + // change data to be invalid + getCitiesNameWithCheapestTennisPrice = GetCitiesNameWithCheapestTennisPriceOnWeekendInteractor(InvalidFakeData) + // given limit the return by 1 + val limit = 1 + // when the actual result is exception + val result = Executable { getCitiesNameWithCheapestTennisPrice(limit) } + // then check of the result + assertThrows(IllegalStateException::class.java, result) + } + + @Test + fun `should throw exception when the data is empty`() { + // change data to be empty + getCitiesNameWithCheapestTennisPrice = GetCitiesNameWithCheapestTennisPriceOnWeekendInteractor(EmptyFakeData) + // given limit the return by 1 + val limit = 1 + // when the actual result is exception + val result = Executable { getCitiesNameWithCheapestTennisPrice(limit) } + // then check of the result + assertThrows(IllegalStateException::class.java, result) + } +} \ No newline at end of file