package com.f2prateek.rx.receivers.battery;

import android.app.Application;
import android.content.Intent;
import android.os.BatteryManager;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import rx.observers.TestSubscriber;

@RunWith(RobolectricTestRunner.class) //
public class RxBatteryManagerTest {
  @Test public void batteryStateChanges() {
    Application application = RuntimeEnvironment.application;

    TestSubscriber<BatteryState> o = new TestSubscriber<>();
    RxBatteryManager.batteryChanges(application).subscribe(o);
    o.assertValues();

    Intent intent1 = new Intent(Intent.ACTION_BATTERY_CHANGED) //
        .putExtra(BatteryManager.EXTRA_HEALTH, BatteryManager.BATTERY_HEALTH_COLD)
        .putExtra(BatteryManager.EXTRA_ICON_SMALL, 0x3def2)
        .putExtra(BatteryManager.EXTRA_LEVEL, 10)
        .putExtra(BatteryManager.EXTRA_PLUGGED, 0)
        .putExtra(BatteryManager.EXTRA_PRESENT, true)
        .putExtra(BatteryManager.EXTRA_SCALE, 100)
        .putExtra(BatteryManager.EXTRA_STATUS, BatteryManager.BATTERY_STATUS_CHARGING)
        .putExtra(BatteryManager.EXTRA_TECHNOLOGY, "unknown")
        .putExtra(BatteryManager.EXTRA_TEMPERATURE, 40)
        .putExtra(BatteryManager.EXTRA_VOLTAGE, 10000);
    application.sendBroadcast(intent1);
    BatteryState event1 =
        BatteryState.create(BatteryHealth.COLD, 0x3def2, 10, 0, true, 100,
            BatteryStatus.CHARGING, "unknown", 40, 10000);
    o.assertValues(event1);
  }
}