( block TaskBlock, recurrenceLimit int, )
| 735 | } |
| 736 | |
| 737 | func (s *inMemoryManagerStore) createTaskBlockForTest( |
| 738 | block TaskBlock, |
| 739 | recurrenceLimit int, |
| 740 | ) (BlockMutationResult, error) { |
| 741 | trimmedTaskID := strings.TrimSpace(block.TaskID) |
| 742 | taskRecord, ok := s.tasks[trimmedTaskID] |
| 743 | if !ok { |
| 744 | return BlockMutationResult{}, ErrTaskNotFound |
| 745 | } |
| 746 | hadClearedPrior := s.hasClearedTaskBlockKindForTest(trimmedTaskID, block.Kind) |
| 747 | created := cloneTaskBlock(block) |
| 748 | created.ID = strings.TrimSpace(created.ID) |
| 749 | created.TaskID = trimmedTaskID |
| 750 | created.WorkspaceID = strings.TrimSpace(taskRecord.WorkspaceID) |
| 751 | created.Kind = created.Kind.Normalize() |
| 752 | created.Reason = strings.TrimSpace(created.Reason) |
| 753 | created.CreatedBy.Kind = created.CreatedBy.Kind.Normalize() |
| 754 | created.CreatedBy.Ref = strings.TrimSpace(created.CreatedBy.Ref) |
| 755 | created.ClearedAt = time.Time{} |
| 756 | created.ClearedBy = ActorIdentity{} |
| 757 | created.ClearNote = "" |
| 758 | if created.ID == "" { |
| 759 | return BlockMutationResult{}, ErrValidation |
| 760 | } |
| 761 | if err := created.Kind.Validate("task_block.kind"); err != nil { |
| 762 | return BlockMutationResult{}, err |
| 763 | } |
| 764 | if created.Reason == "" { |
| 765 | return BlockMutationResult{}, ErrValidation |
| 766 | } |
| 767 | if s.blocks[trimmedTaskID] == nil { |
| 768 | s.blocks[trimmedTaskID] = make(map[string]TaskBlock) |
| 769 | } |
| 770 | s.blocks[trimmedTaskID][created.ID] = cloneTaskBlock(created) |
| 771 | result := BlockMutationResult{ |
| 772 | Block: cloneTaskBlock(created), |
| 773 | Recurrence: BlockRecurrence{ |
| 774 | TaskID: created.TaskID, |
| 775 | Kind: created.Kind, |
| 776 | }, |
| 777 | } |
| 778 | if !hadClearedPrior { |
| 779 | return result, nil |
| 780 | } |
| 781 | key := blockRecurrenceTestKey(created.TaskID, created.Kind) |
| 782 | recurrence := s.blockRecurrences[key] |
| 783 | recurrence.TaskID = created.TaskID |
| 784 | recurrence.Kind = created.Kind |
| 785 | recurrence.Count++ |
| 786 | recurrence.UpdatedAt = created.CreatedAt.UTC() |
| 787 | s.blockRecurrences[key] = recurrence |
| 788 | result.Recurrence = recurrence |
| 789 | if recurrenceLimit > 0 && recurrence.Count >= recurrenceLimit { |
| 790 | escalated := s.tasks[created.TaskID] |
| 791 | if escalated.NeedsAttention == nil { |
| 792 | needsAttention := NeedsAttention{ |
| 793 | Reason: fmt.Sprintf( |
| 794 | "task re-blocked %d times with %q blocks", |
no test coverage detected