package source import ( "testing" ) func TestParse(t *testing.T) { tt := []struct { name string expectErr error expectMigration *Migration }{ { name: "1_foobar.up.sql", expectErr: nil, expectMigration: &Migration{ Version: 1, Identifier: "foobar", Direction: Up, Raw: "1_foobar.up.sql", }, }, { name: "1_foobar.down.sql", expectErr: nil, expectMigration: &Migration{ Version: 1, Identifier: "foobar", Direction: Down, Raw: "1_foobar.down.sql", }, }, { name: "1_f-o_ob+ar.up.sql", expectErr: nil, expectMigration: &Migration{ Version: 1, Identifier: "f-o_ob+ar", Direction: Up, Raw: "1_f-o_ob+ar.up.sql", }, }, { name: "1485385885_foobar.up.sql", expectErr: nil, expectMigration: &Migration{ Version: 1485385885, Identifier: "foobar", Direction: Up, Raw: "1485385885_foobar.up.sql", }, }, { name: "20170412214116_date_foobar.up.sql", expectErr: nil, expectMigration: &Migration{ Version: 20170412214116, Identifier: "date_foobar", Direction: Up, Raw: "20170412214116_date_foobar.up.sql", }, }, { name: "-1_foobar.up.sql", expectErr: ErrParse, expectMigration: nil, }, { name: "foobar.up.sql", expectErr: ErrParse, expectMigration: nil, }, { name: "1.up.sql", expectErr: ErrParse, expectMigration: nil, }, { name: "1_foobar.sql", expectErr: ErrParse, expectMigration: nil, }, { name: "1_foobar.up", expectErr: ErrParse, expectMigration: nil, }, { name: "1_foobar.down", expectErr: ErrParse, expectMigration: nil, }, } for i, v := range tt { f, err := Parse(v.name) if err != v.expectErr { t.Errorf("expected %v, got %v, in %v", v.expectErr, err, i) } if v.expectMigration != nil && *f != *v.expectMigration { t.Errorf("expected %+v, got %+v, in %v", *v.expectMigration, *f, i) } } }