Skip to content

Commit

Permalink
complete database test (1 task completed)
Browse files Browse the repository at this point in the history
  • Loading branch information
dev-mgkaung committed Jul 12, 2020
1 parent c101393 commit 9dc8f4f
Show file tree
Hide file tree
Showing 18 changed files with 259 additions and 69 deletions.
1 change: 1 addition & 0 deletions .idea/gradle.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 3 additions & 1 deletion app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ android {

defaultConfig {
applicationId "mk.kotlin.travel_padc_assignment"
minSdkVersion 16
minSdkVersion 21
targetSdkVersion 30
versionCode 1
versionName "1.0"
Expand Down Expand Up @@ -81,4 +81,6 @@ dependencies {
androidTestImplementation "org.mockito:mockito-android:3.1.0"
androidTestImplementation "androidx.test.ext:junit:1.1.1"

def fragment_version = "1.2.5"
debugImplementation "androidx.fragment:fragment-testing:$fragment_version"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package mk.kotlin.travel_padc_assignment.instrumentedTests

import android.content.Context
import androidx.room.Room
import androidx.test.core.app.ApplicationProvider
import androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner
import mk.kotlin.travel_padc_assignment.datas.vos.CountryVO
import mk.kotlin.travel_padc_assignment.datas.vos.DataVO
import mk.kotlin.travel_padc_assignment.persistances.TourDB
import mk.kotlin.travel_padc_assignment.persistances.TourDao
import org.junit.After
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import java.util.*

@RunWith(AndroidJUnit4ClassRunner::class)
class DatabaseTest {

private lateinit var mDao: TourDao
private lateinit var db: TourDB

@Before
fun createDb() {
val context = ApplicationProvider.getApplicationContext<Context>()
db = Room.inMemoryDatabaseBuilder(
context, TourDB::class.java
).build()
mDao = db.TourDao()
}

@After
fun closeDb() {
db.close()
}

@Test
fun insertIntoDatabaseTest() {
val countryone = CountryVO()
countryone.name="Myanmar"
countryone.average_rating=4.0
countryone.description="Hi desc"
countryone.location="Yangon"

val countrytwo = CountryVO()
countrytwo.name="United state"
countrytwo.average_rating=5.0
countrytwo.description="Hi desc"
countrytwo.location="American"

mDao.insertAllData(Arrays.asList(countryone,countrytwo))

assert(mDao.getTourById(countryone.name).value?.name == countryone.name)
}


}

Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
package mk.kotlin.travel_padc_assignment.instrumentedTests

Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package mk.kotlin.travel_padc_assignment.uiTests

import android.content.Intent
import androidx.test.espresso.Espresso
import androidx.test.espresso.action.ViewActions
import androidx.test.espresso.assertion.ViewAssertions
import androidx.test.espresso.contrib.RecyclerViewActions
import androidx.test.espresso.matcher.ViewMatchers
import androidx.test.espresso.matcher.ViewMatchers.withId
import androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner
import androidx.test.rule.ActivityTestRule
import mk.kotlin.travel_padc_assignment.R
import mk.kotlin.travel_padc_assignment.activities.MainActivity
import mk.kotlin.travel_padc_assignment.viewmodels.viewholders.CountryViewHolder
import mk.kotlin.travel_padc_assignment.viewmodels.viewholders.PopularTourViewHolder
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith


@RunWith(AndroidJUnit4ClassRunner::class)
class GoToDetailTest {
private val activityTestRule = ActivityTestRule<MainActivity>(MainActivity::class.java)

@Before
open fun setUp() {
activityTestRule.launchActivity(Intent())
}

@Test
fun tapOnPopularListRecyclerview_navigateToDetails() {
Espresso.onView(withId(R.id.mainRecyler))
.perform(
RecyclerViewActions.actionOnItemAtPosition<PopularTourViewHolder>(0,
ViewActions.click()
))

Espresso.onView(withId(R.id.tvLocation))
.check(ViewAssertions.matches(ViewMatchers.isDisplayed()))
}
@Test
fun tapOnCountryListRecyclerview_navigateToDetails() {
Espresso.onView(withId(R.id.mainRecyler))
.perform(
RecyclerViewActions.actionOnItemAtPosition<CountryViewHolder>(0,
ViewActions.click()
))

Espresso.onView(withId(R.id.tvLocation))
.check(ViewAssertions.matches(ViewMatchers.isDisplayed()))
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package mk.kotlin.travel_padc_assignment.uiTests


import org.hamcrest.BaseMatcher
import org.hamcrest.Description
import org.hamcrest.Matcher

fun <T> first(matcher: Matcher<T>): Matcher<T> {
return object :BaseMatcher<T>(){

var isFirst : Boolean = true

override fun describeTo(description: Description?) {
description?.appendText(FIRST_ITEM_DESCRIPTION)
}

override fun matches(item: Any?): Boolean {
if (isFirst && matcher.matches(item)) {
isFirst = false
return true
}
return false
}
}
}

const val FIRST_ITEM_DESCRIPTION = "Return The First Matching Item"
3 changes: 3 additions & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".activities.DetailActivity"
android:theme="@style/AppTheme"/>
</application>

</manifest>
Original file line number Diff line number Diff line change
@@ -1,11 +1,8 @@
package mk.kotlin.travel_padc_assignment.fragments
package mk.kotlin.travel_padc_assignment.activities

import androidx.lifecycle.Observer
import android.content.Context
import android.content.Intent
import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.LinearLayoutManager
import com.bumptech.glide.Glide
import com.padcmyanmar.padcx.padc_x_recyclerview_ypst.mvp.presenters.DetailsPresenterImpl
Expand All @@ -23,38 +20,25 @@ import mk.kotlin.travel_padc_assignment.mvp.views.DetailsView
private const val ARG_PARAM1 = "param1"
private const val ARG_PARAM2 = "param2"

class DetailActivity: BaseActivity(), DetailsView {

class DetailFragment : Fragment(), DetailsView {

private var name: String = ""
private var mValue: Int = 0
private lateinit var mDetailPresenter: DetailsPresenter
private lateinit var mScoreandReviewAdapter: ScoreandReviewAdapter
private lateinit var mPhotoAdapter: PhotoAdapter

val mTourModel: TourModel = TourModelImpl

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
arguments?.let {
name = it.getString(ARG_PARAM1).toString()
mValue = it.getInt(ARG_PARAM2)
}
}

override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return inflater.inflate(R.layout.fragment_detail, container, false)
}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)

setContentView(R.layout.fragment_detail)
initPresneter()
setUpRecycler()
settingData()
mDetailPresenter.onDetailUiReadyState(name,mValue,this)

mDetailPresenter.onDetailUiReadyState(
intent.getStringExtra(ARG_PARAM1).toString(),
intent.getIntExtra(ARG_PARAM2, 0),this)

}

private fun initPresneter(){
Expand All @@ -66,8 +50,8 @@ class DetailFragment : Fragment(), DetailsView {
mScoreandReviewAdapter = ScoreandReviewAdapter()
mPhotoAdapter = PhotoAdapter()

val layoutManager = LinearLayoutManager(activity,LinearLayoutManager.HORIZONTAL,false)
val layoutManagerTwo = LinearLayoutManager(activity,LinearLayoutManager.HORIZONTAL,false)
val layoutManager = LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL,false)
val layoutManagerTwo = LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL,false)
scorce_recyclerview.layoutManager = layoutManager
photo_list_recyclerview.layoutManager = layoutManagerTwo
scorce_recyclerview.adapter = mScoreandReviewAdapter
Expand All @@ -77,35 +61,36 @@ class DetailFragment : Fragment(), DetailsView {

private fun settingData(){
arrow_image.setOnClickListener {
activity?.supportFragmentManager?.popBackStack()
super.onBackPressed()
}
}


companion object {
@JvmStatic
fun newInstance(name: String, value: Int) =
DetailFragment().apply {
arguments = Bundle().apply {
putString(ARG_PARAM1, name)
putInt(ARG_PARAM2, value)
}
}
fun newIntent(context: Context,name: String, value: Int): Intent {
val intent = Intent(context, DetailActivity::class.java)
intent.putExtra(ARG_PARAM1,name)
intent.putExtra(ARG_PARAM2,value)
return intent
}
}


override fun displayDetails(countryVO: CountryVO) {
activity?.let {
this?.let {
Glide.with(it)
.load(countryVO.photos[1])
.centerCrop()
.into(bgimage)
}
title.text = countryVO.name
stitle.text = countryVO.name
tvLocation.text = countryVO.location
tvRating.text = countryVO.average_rating.toString()
ratingBar.rating = countryVO.average_rating.toFloat()
mScoreandReviewAdapter.setNewData(countryVO.scores_and_reviews)
mPhotoAdapter.setNewData(countryVO.photos)
detail.text = countryVO.description
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@ class MainActivity : BaseActivity() {
R.id.action_search -> navChange(SearchFragment())
R.id.action_favourite -> navChange(FavouriteFragment())
R.id.action_price -> navChange(PriceFragment())
R.id.action_detail -> navChange(DetailFragment())
}
return true
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,12 @@ import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.core.app.ActivityCompat
import androidx.recyclerview.widget.LinearLayoutManager
import com.padcmyanmar.padcx.padc_x_recyclerview_ypst.mvp.presenters.MainPresenterImpl
import kotlinx.android.synthetic.main.fragment_home.*
import mk.kotlin.travel_padc_assignment.R
import mk.kotlin.travel_padc_assignment.activities.DetailActivity
import mk.kotlin.travel_padc_assignment.adapters.CountryListAdapter
import mk.kotlin.travel_padc_assignment.adapters.MainAdapter
import mk.kotlin.travel_padc_assignment.datas.model.TourModel
Expand Down Expand Up @@ -102,9 +104,9 @@ class HomeFragment : Fragment(), ToursItemDelegate, MainView {
}

override fun navigateToTourDetail(name: String, value: Int) {
activity?.supportFragmentManager?.beginTransaction()
?.replace(R.id.ftcontainer, DetailFragment.newInstance(name,value))?.addToBackStack(null)
?.commit()

context?.let { ActivityCompat.startActivity(it,DetailActivity.newIntent(it,name,value),null) }

}

override fun onTapTourItem(name: String, id: Int) {}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import mk.kotlin.travel_padc_assignment.mvp.views.MainView

class MainPresenterImpl : MainPresenter, AbstractBasePresenter<MainView>() {

private val mTourModel = TourModelImpl
var mTourModel = TourModelImpl


override fun onSwipeRefresh() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package mk.kotlin.travel_padc_assignment.viewmodels.viewholders

import android.util.Log
import android.view.View
import com.bumptech.glide.Glide
import kotlinx.android.synthetic.main.country_recyclerview_item.view.*
Expand All @@ -23,18 +22,11 @@ class CountryViewHolder(itemView: View,delegate: ToursItemDelegate) : BaseViewHo

override fun bindData(data: CountryVO) {
mData = data

Glide.with(itemView.context)
.load(data.photos[1])
.centerCrop()
.into(itemView.countryimage)

// itemView.tvLabelOne.text = data.location
// val str:String = getCountryName(data.location)
// itemView.titlelabel.text = str
itemView.country_rate_id.text = data.average_rating.toString()
Log.d("location",data.location)


}

Expand Down
Loading

0 comments on commit 9dc8f4f

Please sign in to comment.