
import {Collection, Model, Types} from "../../../lib/index";
import assert from "assert";

class Product extends Model<Product> {
    structure() {
        return {
            name: Types.String,
            price: Types.Number
        };
    }
}

describe("Collection.some", () => {

    it("some()", () => {

        class Products extends Collection<Product> {
            Model() {
                return Product;
            }
        }

        const products = new Products([
            {name: "Eggs", price: 1.8},
            {name: "Pie", price: 10},
            {name: "Milk", price: 4}
        ]);

        let result = products.some((product) =>
            product.get("price")! > 5
        );
        assert.strictEqual( result, true );


        result = products.some((product) =>
            product.get("price")! > 20
        );
        assert.strictEqual( result, false );
    });
    
    it("some(f, context)", () => {
        class Products extends Collection<Product> {
            Model() {
                return Product;
            }
        }

        const products = new Products([
            {name: "Eggs", price: 1.2}
        ]);

        
        const context = {
            changed: false,
            handler() {
                this.changed = true;
                return true;
            }
        };

        products.some(context.handler, context);

        assert.strictEqual(context.changed, true);
    });
    
});
