(t *testing.T)
| 1684 | } |
| 1685 | |
| 1686 | func TestAITasks(t *testing.T) { |
| 1687 | t.Parallel() |
| 1688 | ctx, logger := ctxAndLogger(t) |
| 1689 | |
| 1690 | t.Run("Multiple tasks can be defined", func(t *testing.T) { |
| 1691 | t.Parallel() |
| 1692 | |
| 1693 | // nolint:dogsled |
| 1694 | _, filename, _, _ := runtime.Caller(0) |
| 1695 | |
| 1696 | dir := filepath.Join(filepath.Dir(filename), "testdata", "resources", "ai-tasks-multiple") |
| 1697 | tfPlanRaw, err := os.ReadFile(filepath.Join(dir, "ai-tasks-multiple.tfplan.json")) |
| 1698 | require.NoError(t, err) |
| 1699 | var tfPlan tfjson.Plan |
| 1700 | err = json.Unmarshal(tfPlanRaw, &tfPlan) |
| 1701 | require.NoError(t, err) |
| 1702 | tfPlanGraph, err := os.ReadFile(filepath.Join(dir, "ai-tasks-multiple.tfplan.dot")) |
| 1703 | require.NoError(t, err) |
| 1704 | |
| 1705 | state, err := terraform.ConvertState(ctx, []*tfjson.StateModule{tfPlan.PlannedValues.RootModule, tfPlan.PriorState.Values.RootModule}, string(tfPlanGraph), logger) |
| 1706 | require.NotNil(t, state) |
| 1707 | require.NoError(t, err) |
| 1708 | require.True(t, state.HasAITasks) |
| 1709 | // Multiple coder_ai_tasks resources can be defined, but only 1 is allowed. |
| 1710 | // This is validated once all parameters are resolved etc as part of the workspace build, but for now we can allow it. |
| 1711 | require.Len(t, state.AITasks, 2) |
| 1712 | }) |
| 1713 | |
| 1714 | t.Run("Can use sidebar app ID", func(t *testing.T) { |
| 1715 | t.Parallel() |
| 1716 | |
| 1717 | // nolint:dogsled |
| 1718 | _, filename, _, _ := runtime.Caller(0) |
| 1719 | |
| 1720 | dir := filepath.Join(filepath.Dir(filename), "testdata", "resources", "ai-tasks-sidebar") |
| 1721 | tfPlanRaw, err := os.ReadFile(filepath.Join(dir, "ai-tasks-sidebar.tfplan.json")) |
| 1722 | require.NoError(t, err) |
| 1723 | var tfPlan tfjson.Plan |
| 1724 | err = json.Unmarshal(tfPlanRaw, &tfPlan) |
| 1725 | require.NoError(t, err) |
| 1726 | tfPlanGraph, err := os.ReadFile(filepath.Join(dir, "ai-tasks-sidebar.tfplan.dot")) |
| 1727 | require.NoError(t, err) |
| 1728 | |
| 1729 | state, err := terraform.ConvertState(ctx, []*tfjson.StateModule{tfPlan.PlannedValues.RootModule, tfPlan.PriorState.Values.RootModule}, string(tfPlanGraph), logger) |
| 1730 | require.NotNil(t, state) |
| 1731 | require.NoError(t, err) |
| 1732 | require.True(t, state.HasAITasks) |
| 1733 | require.Len(t, state.AITasks, 1) |
| 1734 | |
| 1735 | sidebarApp := state.AITasks[0].GetSidebarApp() |
| 1736 | require.NotNil(t, sidebarApp) |
| 1737 | require.Equal(t, "5ece4674-dd35-4f16-88c8-82e40e72e2fd", sidebarApp.GetId()) |
| 1738 | require.Equal(t, "5ece4674-dd35-4f16-88c8-82e40e72e2fd", state.AITasks[0].AppId) |
| 1739 | }) |
| 1740 | |
| 1741 | t.Run("Can use app ID", func(t *testing.T) { |
| 1742 | t.Parallel() |
| 1743 |
nothing calls this directly
no test coverage detected