package com.example import android.app.Application import android.content.Context import androidx.test.core.app.ApplicationProvider import com.example.data.local.AppDatabase import com.example.data.repository.MarketingRepository import com.example.ui.viewmodel.MarketingViewModel import com.example.ui.viewmodel.UserRole import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.firstOrNull import kotlinx.coroutines.runBlocking import org.junit.Assert.assertEquals import org.junit.Assert.assertFalse import org.junit.Assert.assertNotNull import org.junit.Assert.assertTrue import org.junit.Test import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner import org.robolectric.annotation.Config @RunWith(RobolectricTestRunner::class) @Config(sdk = [36]) class ExampleRobolectricTest { @Test fun `read string from context`() { val context = ApplicationProvider.getApplicationContext() val appName = context.getString(R.string.app_name) assertEquals("Narada", appName) } @Test fun `verify business details for DEWA Gram Udhyog Pvt Ltd`() = runBlocking { val app = ApplicationProvider.getApplicationContext() val db = AppDatabase.getDatabase(app) val repository = MarketingRepository(db) repository.seedInitialDataIfEmpty() val account = db.consumerAccountDao().getAccount().firstOrNull() assertNotNull(account) assertEquals("DEWA Gram Udhyog Pvt Ltd", account?.businessName) assertEquals("06AAJCD0975H1ZK", account?.gstNumber) assertEquals("contact@sdadigital.in", account?.email) assertEquals("+919461321162", account?.mobileNumber) assertEquals("Gali No 4, Uttam Nagar Loharu Road, Bhiwani 127021 HR", account?.address) } @Test fun `verify user contact list contains all 5 required contacts`() = runBlocking { val app = ApplicationProvider.getApplicationContext() val db = AppDatabase.getDatabase(app) val repository = MarketingRepository(db) repository.seedInitialDataIfEmpty() val bimla = db.contactDao().findByPhone("+919355321162") assertNotNull("Mrs Bimla must be present", bimla) assertEquals("Mrs Bimla", bimla?.customerName) assertEquals("9355321162", bimla?.mobileNumber) assertEquals("Bhiwani", bimla?.district) assertEquals("OPTED_IN", bimla?.optInStatus) val dinesh = db.contactDao().findByPhone("+919315321162") assertNotNull("Mr. Dinesh Kumar must be present", dinesh) assertEquals("Mr. Dinesh Kumar", dinesh?.customerName) assertEquals("9315321162", dinesh?.mobileNumber) val vikash = db.contactDao().findByPhone("+916000072002") assertNotNull("Vikash Verma must be present", vikash) assertEquals("Vikash Verma", vikash?.customerName) assertEquals("6000072002", vikash?.mobileNumber) val ajay = db.contactDao().findByPhone("+919812405817") assertNotNull("Ajay Kumar must be present", ajay) assertEquals("Ajay Kumar", ajay?.customerName) assertEquals("9812405817", ajay?.mobileNumber) val sudhir = db.contactDao().findByPhone("+917600910000") assertNotNull("Sudhir Malik must be present", sudhir) assertEquals("Sudhir Malik", sudhir?.customerName) assertEquals("7600910000", sudhir?.mobileNumber) } @Test fun `verify WhatsApp OTP Login per User Type`() { val app = ApplicationProvider.getApplicationContext() val viewModel = MarketingViewModel(app) // Initially not logged in assertFalse(viewModel.isLoggedIn.value) // Test 1: User Type wise login as Business Consumer val invalidAttempt = viewModel.verifyOtpAndLogin("000000", UserRole.CONSUMER, "+919461321162") assertFalse("Random invalid OTP should fail", invalidAttempt) // Valid test OTP (e.g. 123456) val validConsumer = viewModel.verifyOtpAndLogin("123456", UserRole.CONSUMER, "+919461321162") assertTrue("Valid OTP should succeed", validConsumer) assertTrue(viewModel.isLoggedIn.value) assertEquals(UserRole.CONSUMER, viewModel.currentRole.value) assertEquals("+919461321162", viewModel.loggedInPhone.value) // Logout viewModel.logout() assertFalse(viewModel.isLoggedIn.value) // Test 2: User Type wise login as Admin val validAdmin = viewModel.verifyOtpAndLogin("123456", UserRole.ADMIN, "+919315321162") assertTrue("Valid Admin OTP should succeed", validAdmin) assertTrue(viewModel.isLoggedIn.value) assertEquals(UserRole.ADMIN, viewModel.currentRole.value) // Logout viewModel.logout() assertFalse(viewModel.isLoggedIn.value) // Test 3: User Type wise login as Super Admin val validSuperAdmin = viewModel.verifyOtpAndLogin("123456", UserRole.SUPER_ADMIN, "+919461321162") assertTrue("Valid Super Admin OTP should succeed", validSuperAdmin) assertTrue(viewModel.isLoggedIn.value) assertEquals(UserRole.SUPER_ADMIN, viewModel.currentRole.value) } }