|
@RunWith(PowerMockRunner::class) |
|
@PrepareForTest(DrawerToggleFactory::class, |
|
MainPresenter::class) |
|
class NavigationDrawerViewExtensionTest { |
|
|
|
@Mock lateinit private var activity: BaseActivity |
|
@Mock lateinit private var drawerToggleFactory: DrawerToggleFactory |
|
@Mock lateinit private var eventsDelegate: NavigationDrawerViewExtensionDelegate |
|
|
|
@Mock lateinit private var toolbar: Toolbar |
|
@Mock lateinit private var drawer: DrawerLayout |
|
@Mock lateinit private var navigationView: NavigationView |
|
@Mock lateinit private var drawerToggle: ActionBarDrawerToggle |
|
|
|
@InjectMocks private lateinit var classToTest: NavigationDrawerViewExtension |
|
|
|
@Captor lateinit private var captor: ArgumentCaptor<NavigationView.OnNavigationItemSelectedListener> |
|
|
|
@Before |
|
fun setup() { |
|
classToTest.eventsDelegate = eventsDelegate |
|
} |
|
|
|
@Test |
|
fun closeMenuOnBackIfOpen() { |
|
// given |
|
classToTest.setViews(drawer, navigationView) |
|
val gravity = GravityCompat.START |
|
given(drawer.isDrawerOpen(gravity)).willReturn(true) |
|
|
|
// when |
|
val result = classToTest.onBackPressed() |
|
|
|
// then |
|
verify(drawer).closeDrawer(gravity) |
|
assertThat(result, isTrue()) |
|
} |
|
|
|
@Test |
|
fun processOnBackNormallyIfDrawerIsClosed() { |
|
// when |
|
val result = classToTest.onBackPressed() |
|
|
|
// then |
|
verify(drawer, never()).closeDrawer(any<Int>()) |
|
assertThat(result, isFalse()) |
|
} |
|
|
|
@Test |
|
fun drawerToggleIsCreatedAndInitializedAfterViewsWhereSet() { |
|
// given |
|
mockCreateDrawerToggle() |
|
classToTest.setToolbar(toolbar) |
|
|
|
// when |
|
classToTest.setViews(drawer, navigationView) |
|
|
|
// then |
|
verify(drawer).setDrawerListener(drawerToggle) |
|
verify(drawerToggle).syncState() |
|
} |
|
|
|
@Test |
|
fun listensForNavigationEvents() { |
|
// given |
|
mockCreateDrawerToggle() |
|
classToTest.setViews(drawer, navigationView) |
|
|
|
// when |
|
classToTest.onCreate() |
|
|
|
// then |
|
verify(navigationView).setNavigationItemSelectedListener(any()) |
|
} |
|
|
|
@Test |
|
fun googleMapsScreenCanBeOpened() { |
|
classToTest.setViews(drawer, navigationView) |
|
|
|
// when |
|
clickNavgationItem(R.id.nav1) |
|
|
|
// then |
|
verify(eventsDelegate).showNav1Screen() |
|
} |
|
|
|
@Test |
|
fun favoritesScreenCanBeOpened() { |
|
classToTest.setViews(drawer, navigationView) |
|
|
|
// when |
|
clickNavgationItem(R.id.nav2) |
|
|
|
// then |
|
verify(eventsDelegate).showNav2Screen() |
|
} |
|
|
|
|
|
private fun clickNavgationItem(itemId: Int) { |
|
mockCreateDrawerToggle() |
|
classToTest.onCreate(null) |
|
|
|
verify(navigationView).setNavigationItemSelectedListener(captor.capture()) |
|
captor.value.onNavigationItemSelected(ActionMenuItem(null, 0, itemId, 0, 0, "")) |
|
} |
|
|
|
private fun mockCreateDrawerToggle() { |
|
given(drawerToggleFactory.create( |
|
activity, |
|
drawer, |
|
toolbar, |
|
R.string.navigation_drawer_open, |
|
R.string.navigation_drawer_close) |
|
).willReturn(drawerToggle) |
|
} |
|
} |