Package billing.test

Source Code of billing.test.NormalCustomerTest

package billing.test;

import static org.junit.Assert.assertEquals;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.joda.time.LocalDateTime;
import org.junit.Test;

import billing.BillCalculator;
import billing.Money;
import billing.Slip;
import billing.UserMonthUsage;
import billing.DataFields.PackageType;
import billing.DataFields.SlipType;
import billing.DataFields.UserField;
import billing.DataFields.UserType;

public class NormalCustomerTest {

    private static final BillCalculator calculator = new BillCalculator("./groovy/billing/");

    @Test
    public void testNormalUserNoPackageNoActivity() {
        Map<UserField, Object> data = new HashMap<UserField, Object>();
        data.put(UserField.kUserType, UserType.kNormal);
        UserMonthUsage usage = new UserMonthUsage(1, data);
        assertEquals(new Money(0), calculator.calculate(usage));
    }

    @Test
    public void testNormalUserNoPackageOneCall() {
        Map<UserField, Object> data = new HashMap<UserField, Object>();
        data.put(UserField.kUserType, UserType.kNormal);
        List<Slip> slips = new ArrayList<Slip>();
        slips.add(new Slip(SlipType.kPhoneCall, new LocalDateTime(), 1));
        data.put(UserField.kSlips, slips);
        UserMonthUsage usage = new UserMonthUsage(2, data);
        assertEquals(Money.get(0, 60), calculator.calculate(usage));
    }

    @Test
    public void testNormalUserNoPackageOneShortMessage() {
        Map<UserField, Object> data = new HashMap<UserField, Object>();
        data.put(UserField.kUserType, UserType.kNormal);
        List<Slip> slips = new ArrayList<Slip>();
        slips.add(new Slip(SlipType.kShortMessage, new LocalDateTime(), 1));
        data.put(UserField.kSlips, slips);
        UserMonthUsage usage = new UserMonthUsage(3, data);
        assertEquals(Money.get(0, 10), calculator.calculate(usage));
    }

    @Test
    public void testNormalUserNoPackage100kData() {
        Map<UserField, Object> data = new HashMap<UserField, Object>();
        data.put(UserField.kUserType, UserType.kNormal);
        List<Slip> slips = new ArrayList<Slip>();
        slips.add(new Slip(SlipType.kInternet, new LocalDateTime(), 100));
        data.put(UserField.kSlips, slips);
        UserMonthUsage usage = new UserMonthUsage(4, data);
        assertEquals(Money.get(0, 50), calculator.calculate(usage));
    }

    public List<PackageType> getPackages(PackageType... packages) {
        return Arrays.asList(packages);
    }

    @Test
    public void testNormalUserPhoneCallPackageNoActivity() {
        Map<UserField, Object> data = new HashMap<UserField, Object>();
        data.put(UserField.kUserType, UserType.kNormal);

        List<Slip> slips = new ArrayList<Slip>();
        slips.add(new Slip(SlipType.kPhoneCall, new LocalDateTime(), 0));
        data.put(UserField.kSlips, slips);

        data.put(UserField.kPackages, getPackages(PackageType.kNormalUserPhoneCall));

        UserMonthUsage usage = new UserMonthUsage(5, data);
        assertEquals(Money.get(20, 0), calculator.calculate(usage));
    }

    @Test
    public void testNormalUserPhoneCallPackageWithinLimit() {
        Map<UserField, Object> data = new HashMap<UserField, Object>();
        data.put(UserField.kUserType, UserType.kNormal);

        List<Slip> slips = new ArrayList<Slip>();
        slips.add(new Slip(SlipType.kPhoneCall, new LocalDateTime(), 60));
        data.put(UserField.kSlips, slips);

        data.put(UserField.kPackages, getPackages(PackageType.kNormalUserPhoneCall));

        UserMonthUsage usage = new UserMonthUsage(5, data);
        assertEquals(Money.get(20, 0), calculator.calculate(usage));
    }

    @Test
    public void testNormalUserPhoneCallPackageOneMoreCall() {
        Map<UserField, Object> data = new HashMap<UserField, Object>();
        data.put(UserField.kUserType, UserType.kNormal);

        List<Slip> slips = new ArrayList<Slip>();
        slips.add(new Slip(SlipType.kPhoneCall, new LocalDateTime(), 61));
        data.put(UserField.kSlips, slips);

        data.put(UserField.kPackages, getPackages(PackageType.kNormalUserPhoneCall));

        UserMonthUsage usage = new UserMonthUsage(5, data);
        assertEquals(Money.get(20, 50), calculator.calculate(usage));
    }

    @Test
    public void testNormalUserShortMessagePackageWithinLimit() {
        Map<UserField, Object> data = new HashMap<UserField, Object>();
        data.put(UserField.kUserType, UserType.kNormal);

        List<Slip> slips = new ArrayList<Slip>();
        slips.add(new Slip(SlipType.kShortMessage, new LocalDateTime(), 200));
        data.put(UserField.kSlips, slips);

        data.put(UserField.kPackages, getPackages(PackageType.kNormalUserShortMessage));

        UserMonthUsage usage = new UserMonthUsage(5, data);
        assertEquals(Money.get(10, 0), calculator.calculate(usage));
    }

    @Test
    public void testNormalUserShortMessagePackageOneMore() {
        Map<UserField, Object> data = new HashMap<UserField, Object>();
        data.put(UserField.kUserType, UserType.kNormal);

        List<Slip> slips = new ArrayList<Slip>();
        slips.add(new Slip(SlipType.kShortMessage, new LocalDateTime(), 201));
        data.put(UserField.kSlips, slips);

        data.put(UserField.kPackages, getPackages(PackageType.kNormalUserShortMessage));

        UserMonthUsage usage = new UserMonthUsage(5, data);
        assertEquals(Money.get(10, 10), calculator.calculate(usage));
    }

    @Test
    public void testNormalUserInternetPackageWithinLimit() {
        Map<UserField, Object> data = new HashMap<UserField, Object>();
        data.put(UserField.kUserType, UserType.kNormal);

        List<Slip> slips = new ArrayList<Slip>();
        slips.add(new Slip(SlipType.kInternet, new LocalDateTime(), 50 * 1000));
        data.put(UserField.kSlips, slips);

        data.put(UserField.kPackages, getPackages(PackageType.kNormalUserInternet));

        UserMonthUsage usage = new UserMonthUsage(5, data);
        assertEquals(Money.get(20, 0), calculator.calculate(usage));
    }

    @Test
    public void testNormalUserInternetPackage50kMore() {
        Map<UserField, Object> data = new HashMap<UserField, Object>();
        data.put(UserField.kUserType, UserType.kNormal);

        List<Slip> slips = new ArrayList<Slip>();
        slips.add(new Slip(SlipType.kInternet, new LocalDateTime(), 50 * 1000 + 50));
        data.put(UserField.kSlips, slips);

        data.put(UserField.kPackages, getPackages(PackageType.kNormalUserInternet));

        UserMonthUsage usage = new UserMonthUsage(5, data);
        assertEquals(Money.get(20, 15), calculator.calculate(usage));
    }

    @Test
    public void testNormalUserAllPackagesNoActivity() {
        Map<UserField, Object> data = new HashMap<UserField, Object>();
        data.put(UserField.kUserType, UserType.kNormal);

        List<Slip> slips = new ArrayList<Slip>();
        // slips.add(new Slip(SlipType.kPhoneCall, new LocalDateTime(), 0));
        data.put(UserField.kSlips, slips);

        data.put(UserField.kPackages, getPackages(PackageType.kNormalUserPhoneCall,
                PackageType.kNormalUserShortMessage, PackageType.kNormalUserInternet));

        UserMonthUsage usage = new UserMonthUsage(5, data);
        assertEquals(Money.get(50, 0), calculator.calculate(usage));
    }

    @Test
    public void testNormalUserAllPackagesActivitiesWithInLimit() {
        Map<UserField, Object> data = new HashMap<UserField, Object>();
        data.put(UserField.kUserType, UserType.kNormal);

        List<Slip> slips = new ArrayList<Slip>();
        slips.add(new Slip(SlipType.kPhoneCall, new LocalDateTime(), 60));
        slips.add(new Slip(SlipType.kShortMessage, new LocalDateTime(), 200));
        slips.add(new Slip(SlipType.kInternet, new LocalDateTime(), 50 * 1000));
        data.put(UserField.kSlips, slips);

        data.put(UserField.kPackages, getPackages(PackageType.kNormalUserPhoneCall,
                PackageType.kNormalUserShortMessage, PackageType.kNormalUserInternet));

        UserMonthUsage usage = new UserMonthUsage(5, data);
        assertEquals(Money.get(50, 0), calculator.calculate(usage));
    }

    @Test
    public void testNormalUserAllPackagesActivitiesExceedInLimit() {
        Map<UserField, Object> data = new HashMap<UserField, Object>();
        data.put(UserField.kUserType, UserType.kNormal);

        List<Slip> slips = new ArrayList<Slip>();
        slips.add(new Slip(SlipType.kPhoneCall, new LocalDateTime(), 61));
        slips.add(new Slip(SlipType.kShortMessage, new LocalDateTime(), 210));
        slips.add(new Slip(SlipType.kInternet, new LocalDateTime(), 50 * 1000 + 50));
        data.put(UserField.kSlips, slips);

        data.put(UserField.kPackages, getPackages(PackageType.kNormalUserPhoneCall,
                PackageType.kNormalUserShortMessage, PackageType.kNormalUserInternet));

        UserMonthUsage usage = new UserMonthUsage(5, data);
        assertEquals(Money.get(51, 65), calculator.calculate(usage));
    }

    @Test
    public void testNormalUserNewJoinWithInLimit() {
        Map<UserField, Object> data = new HashMap<UserField, Object>();
        data.put(UserField.kUserType, UserType.kNormal);

        List<Slip> slips = new ArrayList<Slip>();
        slips.add(new Slip(SlipType.kPhoneCall, new LocalDateTime(), 60));
        slips.add(new Slip(SlipType.kShortMessage, new LocalDateTime(), 200));
        slips.add(new Slip(SlipType.kInternet, new LocalDateTime(), 50 * 1000));
        data.put(UserField.kSlips, slips);

        data.put(UserField.kIsNewUser, true);

        UserMonthUsage usage = new UserMonthUsage(5, data);
        assertEquals(new Money(0), calculator.calculate(usage));
    }
}
TOP

Related Classes of billing.test.NormalCustomerTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.