Skip to content

Commit

Permalink
init
Browse files Browse the repository at this point in the history
  • Loading branch information
Yossi Segev committed Feb 23, 2018
0 parents commit 089768c
Show file tree
Hide file tree
Showing 218 changed files with 6,303 additions and 0 deletions.
9 changes: 9 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
*.iml
.gradle
/local.properties
/.idea/workspace.xml
/.idea/libraries
.DS_Store
/build
/captures
.externalNativeBuild
50 changes: 50 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
apply from: 'dependencies.gradle'

buildscript {
ext.kotlin_version = '1.2.21'
repositories {
google()
jcenter()
maven { url 'https://jitpack.io' }
}
dependencies {
classpath 'com.android.tools.build:gradle:3.0.1'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"

// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}

allprojects {
repositories {
google()
jcenter()
maven { url 'https://jitpack.io' }
}
}

task runDomainTests(dependsOn: [':domain:test']) {
description 'Run tests for the domain layer.'
}

task runDataTests(dependsOn: [':data:cleanTestDebugUnitTest', ':data:testDebugUnitTest', 'data:connectedAndroidTest']) {
description 'Run tests for the data layer.'
}

task runAllTests(dependsOn: ['runDomainTests',
'runDataTests',
'presentation:cleanTestDebugUnitTest',
'presentation:testDebugUnitTest',
':presentation:connectedAndroidTest']) {

description 'Run application tests.'
}


task clean(type: Delete) {
delete rootProject.buildDir
}

apply plugin: 'android-reporting'
1 change: 1 addition & 0 deletions data/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/build
54 changes: 54 additions & 0 deletions data/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
android {
compileSdkVersion 26
defaultConfig {
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
testInstrumentationRunner rootProject.ext.testInstrumentationRunner
}

buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}

compileOptions {
targetCompatibility 1.8
sourceCompatibility 1.8
}

sourceSets {
main.java.srcDirs += 'src/main/kotlin'
test.java.srcDirs += 'src/test/kotlin'
androidTest.java.srcDirs += 'src/androidTest/kotlin'
}
}

dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'com.android.support:appcompat-v7:26.1.0'
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"

kapt rootProject.ext.daggerCompiler
implementation rootProject.ext.dagger
implementation rootProject.ext.rxJava
implementation rootProject.ext.retrofit
implementation rootProject.ext.retrofitGsonConverter
implementation rootProject.ext.retrofitRxJava2Adapter
implementation rootProject.ext.room
kapt "android.arch.persistence.room:compiler:1.0.0"

testImplementation rootProject.ext.junit
testImplementation rootProject.ext.mockito
androidTestImplementation rootProject.ext.androidTestRunner
testImplementation "android.arch.persistence.room:testing:1.0.0"

implementation project(':domain')
}
repositories {
mavenCentral()
}
21 changes: 21 additions & 0 deletions data/proguard-rules.pro
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html

# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}

# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable

# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
109 changes: 109 additions & 0 deletions data/src/androidTest/kotlin/com/yossisegev/data/RoomDatabaseTests.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
package com.yossisegev.data

import android.arch.persistence.room.Room
import android.support.test.InstrumentationRegistry
import android.support.test.runner.AndroidJUnit4
import com.yossisegev.data.db.MoviesDao
import com.yossisegev.data.db.MoviesDatabase
import com.yossisegev.data.utils.TestsUtils
import org.junit.After
import org.junit.Assert.*
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith

/**
* Created by Yossi Segev on 19/02/2018.
*/
@RunWith(AndroidJUnit4::class)
class RoomDatabaseTests {

private lateinit var database: MoviesDatabase
private lateinit var moviesDao: MoviesDao

@Before
fun before() {
database = Room.inMemoryDatabaseBuilder(
InstrumentationRegistry.getContext(),
MoviesDatabase::class.java).build()

moviesDao = database.getMoviesDao()
}

@After
fun after() {
database.close()
}

@Test
fun testSingleInsertion() {
val movieData = TestsUtils.getMockedMovieData(21)
moviesDao.saveMovie(movieData)
val result = moviesDao.get(movieData.id)
assertNotNull(result)
assertEquals(result?.id?.toLong(), movieData.id.toLong())
}

@Test
fun testMultipleInsertions() {
val movieDataList = TestsUtils.generateMovieDataList()
moviesDao.saveAllMovies(movieDataList)
val movies = moviesDao.getFavorites()
assertEquals(movies.size.toLong(), 5)
}

@Test
fun testRemoval() {
val movieData = TestsUtils.getMockedMovieData(22)
moviesDao.saveMovie(movieData)
val movies = moviesDao.getFavorites()
assertEquals(movies.size.toLong(), 1)

moviesDao.removeMovie(movieData)
val movies2 = moviesDao.getFavorites()
assertEquals(movies2.size.toLong(), 0)
}

@Test
fun testAllDataIsSaved() {
val movieData = TestsUtils.getMockedMovieData(432)
moviesDao.saveMovie(movieData)
val movies = moviesDao.getFavorites()
val (id, voteCount, voteAverage, adult, popularity, title, posterPath, originalLanguage, originalTitle, backdropPath, releaseDate) = movies[0]
assertEquals(id.toLong(), movieData.id.toLong())
assertEquals(title, movieData.title)
assertEquals(posterPath, movieData.posterPath)
assertEquals(backdropPath, movieData.backdropPath)
assertEquals(adult, movieData.adult)
assertEquals(popularity, movieData.popularity, 0.0)
assertEquals(originalLanguage, movieData.originalLanguage)
assertEquals(releaseDate, movieData.releaseDate)
assertEquals(voteAverage, movieData.voteAverage, 0.0)
assertEquals(voteCount.toLong(), movieData.voteCount.toLong())
assertEquals(originalTitle, movieData.originalTitle)
}

@Test
fun testClearTable() {
val movieDataList = TestsUtils.generateMovieDataList()
moviesDao.saveAllMovies(movieDataList)
val movies = moviesDao.getFavorites()
assertEquals(movies.size.toLong(), 5)
moviesDao.clear()
assertTrue(moviesDao.getFavorites().isEmpty())
}

@Test
fun testSearchingMovieReturnsExpectedResults() {
val movieData1 = TestsUtils.getMockedMovieData(150, "Star wars")
val movieData2 = TestsUtils.getMockedMovieData(151, "The Star")
val movieData3 = TestsUtils.getMockedMovieData(152, "The Starcraft story")
val movieData4 = TestsUtils.getMockedMovieData(153, "The hobbit")
moviesDao.saveMovie(movieData1)
moviesDao.saveMovie(movieData2)
moviesDao.saveMovie(movieData3)
moviesDao.saveMovie(movieData4)
val results = moviesDao.search("%star%")
assertTrue(results.size == 3)
}
}
2 changes: 2 additions & 0 deletions data/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
<manifest package="com.yossisegev.data"
xmlns:android="http://schemas.android.com/apk/res/android"/>
23 changes: 23 additions & 0 deletions data/src/main/kotlin/com/yossisegev/data/api/Api.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.yossisegev.data.api

import com.yossisegev.data.entities.DetailsData
import io.reactivex.Observable
import retrofit2.http.GET
import retrofit2.http.Path
import retrofit2.http.Query

/**
* Created by Yossi Segev on 11/11/2017.
*/
interface Api {

@GET("movie/{id}?append_to_response=videos,reviews")
fun getMovieDetails(@Path("id") movieId: Int): Observable<DetailsData>

@GET("movie/popular") ///movie/now_playing
fun getPopularMovies(): Observable<MovieListResult>

@GET("search/movie")
fun searchMovies(@Query("query") query: String): Observable<MovieListResult>

}
14 changes: 14 additions & 0 deletions data/src/main/kotlin/com/yossisegev/data/api/MovieListResult.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.yossisegev.data.api

import com.google.gson.annotations.SerializedName
import com.yossisegev.data.entities.MovieData

/**
* Created by Yossi Segev on 11/11/2017.
*/
class MovieListResult {

var page: Int = 0
@SerializedName("results")
lateinit var movies: List<MovieData>
}
10 changes: 10 additions & 0 deletions data/src/main/kotlin/com/yossisegev/data/api/ReviewsResult.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.yossisegev.data.api

import com.yossisegev.data.entities.ReviewData

/**
* Created by Yossi Segev on 11/01/2018.
*/
class ReviewsResult {
var results: List<ReviewData>? = null
}
12 changes: 12 additions & 0 deletions data/src/main/kotlin/com/yossisegev/data/api/VideoResult.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.yossisegev.data.api

import com.yossisegev.data.entities.VideoData

/**
* Created by Yossi Segev on 11/01/2018.
*/
class VideoResult {

var results: List<VideoData>? = null

}
33 changes: 33 additions & 0 deletions data/src/main/kotlin/com/yossisegev/data/db/MoviesDao.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package com.yossisegev.data.db

import android.arch.persistence.room.*
import com.yossisegev.data.entities.MovieData

/**
* Created by Yossi Segev on 20/01/2018.
*/
@Dao
interface MoviesDao {

@Query("SELECT * FROM movies")
fun getFavorites(): List<MovieData>

@Query("SELECT * FROM movies WHERE id=:movieId")
fun get(movieId: Int): MovieData?

@Query("SELECT * FROM movies WHERE title LIKE :query")
fun search(query: String): List<MovieData>

@Insert(onConflict = OnConflictStrategy.REPLACE)
fun saveMovie(movie: MovieData)

@Insert(onConflict = OnConflictStrategy.REPLACE)
fun saveAllMovies(movies: List<MovieData>)

@Delete
fun removeMovie(movie: MovieData)

@Query("DELETE FROM movies")
fun clear()

}
13 changes: 13 additions & 0 deletions data/src/main/kotlin/com/yossisegev/data/db/MoviesDatabase.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.yossisegev.data.db

import android.arch.persistence.room.Database
import android.arch.persistence.room.RoomDatabase
import com.yossisegev.data.entities.MovieData

/**
* Created by Yossi Segev on 20/01/2018.
*/
@Database(entities = arrayOf(MovieData::class), version = 1)
abstract class MoviesDatabase: RoomDatabase() {
abstract fun getMoviesDao(): MoviesDao
}
Loading

0 comments on commit 089768c

Please sign in to comment.