(t *testing.T)
| 727 | } |
| 728 | |
| 729 | func TestReparseRillYAML(t *testing.T) { |
| 730 | ctx := context.Background() |
| 731 | repo := makeRepo(t, map[string]string{}) |
| 732 | |
| 733 | mdl := &Resource{ |
| 734 | Name: ResourceName{Kind: ResourceKindModel, Name: "m1"}, |
| 735 | Paths: []string{"/models/m1.sql"}, |
| 736 | ModelSpec: &runtimev1.ModelSpec{ |
| 737 | RefreshSchedule: &runtimev1.Schedule{RefUpdate: true}, |
| 738 | InputConnector: "duckdb", |
| 739 | InputProperties: must(structpb.NewStruct(map[string]any{"sql": "SELECT 10"})), |
| 740 | OutputConnector: "duckdb", |
| 741 | ChangeMode: runtimev1.ModelChangeMode_MODEL_CHANGE_MODE_RESET, |
| 742 | }, |
| 743 | } |
| 744 | perr := &runtimev1.ParseError{ |
| 745 | Message: "rill.yaml not found", |
| 746 | FilePath: "/rill.yaml", |
| 747 | } |
| 748 | |
| 749 | // Parse empty project. Expect rill.yaml error. |
| 750 | p, err := Parse(ctx, repo, "", "", "duckdb", true) |
| 751 | require.NoError(t, err) |
| 752 | require.Nil(t, p.RillYAML) |
| 753 | requireResourcesAndErrors(t, p, nil, []*runtimev1.ParseError{perr}) |
| 754 | |
| 755 | // Add rill.yaml. Expect success. |
| 756 | putRepo(t, repo, map[string]string{ |
| 757 | `rill.yaml`: ``, |
| 758 | }) |
| 759 | diff, err := p.Reparse(ctx, []string{"/rill.yaml"}) |
| 760 | require.NoError(t, err) |
| 761 | require.True(t, diff.Reloaded) |
| 762 | require.NotNil(t, p.RillYAML) |
| 763 | requireResourcesAndErrors(t, p, nil, nil) |
| 764 | |
| 765 | // Remove rill.yaml and add a model. Expect reloaded. |
| 766 | deleteRepo(t, repo, "/rill.yaml") |
| 767 | putRepo(t, repo, map[string]string{"/models/m1.sql": "SELECT 10"}) |
| 768 | diff, err = p.Reparse(ctx, []string{"/rill.yaml", "/models/m1.sql"}) |
| 769 | require.NoError(t, err) |
| 770 | require.True(t, diff.Reloaded) |
| 771 | require.Nil(t, p.RillYAML) |
| 772 | requireResourcesAndErrors(t, p, []*Resource{mdl}, []*runtimev1.ParseError{perr}) |
| 773 | |
| 774 | // Edit model. Expect nothing to happen because rill.yaml is still broken. |
| 775 | putRepo(t, repo, map[string]string{"/models/m1.sql": "SELECT 20"}) |
| 776 | diff, err = p.Reparse(ctx, []string{"/models/m1.sql"}) |
| 777 | require.NoError(t, err) |
| 778 | require.Equal(t, &Diff{Skipped: true}, diff) |
| 779 | require.Nil(t, p.RillYAML) |
| 780 | requireResourcesAndErrors(t, p, []*Resource{mdl}, []*runtimev1.ParseError{perr}) |
| 781 | |
| 782 | // Fix rill.yaml. Expect reloaded. |
| 783 | mdl.ModelSpec.InputProperties = must(structpb.NewStruct(map[string]any{"sql": "SELECT 20"})) |
| 784 | putRepo(t, repo, map[string]string{"/rill.yaml": ""}) |
| 785 | diff, err = p.Reparse(ctx, []string{"/rill.yaml"}) |
| 786 | require.NoError(t, err) |
nothing calls this directly
no test coverage detected