Repository: ctreminiom/go-atlassian
Pull request #77 (2021-11-11 02:49:51)

Feature/agile refactor


Patch:
diff --git a/go.mod b/go.mod
index ab5caa0..17c17c4 100644
--- a/go.mod
+++ b/go.mod
@@ -4,7 +4,6 @@ go 1.15
 
 require (
 	github.com/google/go-querystring v1.1.0
-	github.com/google/uuid v1.1.4
 	github.com/imdario/mergo v0.3.12
 	github.com/stretchr/testify v1.7.0
 	github.com/tidwall/gjson v1.11.0
diff --git a/go.sum b/go.sum
index 3780ba7..257fec9 100644
--- a/go.sum
+++ b/go.sum
@@ -4,8 +4,6 @@ github.com/google/go-cmp v0.5.2 h1:X2ev0eStA3AbceY54o37/0PQ/UWqKEiiO2dKL5OPaFM=
 github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8=
 github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU=
-github.com/google/uuid v1.1.4 h1:0ecGp3skIrHWPNGPJDaBIghfA6Sp7Ruo2Io8eLKzWm0=
-github.com/google/uuid v1.1.4/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
 github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU=
 github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA=
 github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
diff --git a/jira/agile/board.go b/jira/agile/board.go
index 2a94e10..ad2a270 100644
--- a/jira/agile/board.go
+++ b/jira/agile/board.go
@@ -3,11 +3,11 @@ package agile
 import (
 	"context"
 	"fmt"
+	model "github.com/ctreminiom/go-atlassian/pkg/infra/models/agile"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
-	"time"
 )
 
 type BoardService struct{ client *Client }
@@ -16,10 +16,10 @@ type BoardService struct{ client *Client }
 // This board will only be returned if the user has permission to view it.
 // Admins without the view permission will see the board as a private one,
 // so will see only a subset of the board's data (board location for instance).
-func (b *BoardService) Get(ctx context.Context, boardID int) (result *BoardScheme, response *ResponseScheme, err error) {
+func (b *BoardService) Get(ctx context.Context, boardID int) (result *model.BoardScheme, response *ResponseScheme, err error) {
 
 	if boardID == 0 {
-		return nil, nil, fmt.Errorf("error!, please provide a valid boardID value")
+		return nil, nil, model.ErrNoBoardIDError
 	}
 
 	var endpoint = fmt.Sprintf("/rest/agile/1.0/board/%v", boardID)
@@ -39,21 +39,9 @@ func (b *BoardService) Get(ctx context.Context, boardID int) (result *BoardSchem
 	return
 }
 
-type BoardPayloadScheme struct {
-	Name     string                      `json:"name,omitempty"`
-	Type     string                      `json:"type,omitempty"`
-	FilterID int                         `json:"filterId,omitempty"`
-	Location *BoardPayloadLocationScheme `json:"location,omitempty"`
-}
-
-type BoardPayloadLocationScheme struct {
-	Type           string `json:"type,omitempty"`
-	ProjectKeyOrID string `json:"projectKeyOrId,omitempty"`
-}
-
 // Create creates a new board. Board name, type and filter ID is required.
 // Docs: N/A
-func (b *BoardService) Create(ctx context.Context, payload *BoardPayloadScheme) (result *BoardScheme, response *ResponseScheme, err error) {
+func (b *BoardService) Create(ctx context.Context, payload *model.BoardPayloadScheme) (result *model.BoardScheme, response *ResponseScheme, err error) {
 
 	payloadAsReader, err := transformStructToReader(payload)
 	if err != nil {
@@ -78,22 +66,14 @@ func (b *BoardService) Create(ctx context.Context, payload *BoardPayloadScheme)
 	return
 }
 
-type BoardPageScheme struct {
-	MaxResults int            `json:"maxResults"`
-	StartAt    int            `json:"startAt"`
-	Total      int            `json:"total"`
-	IsLast     bool           `json:"isLast"`
-	Values     []*BoardScheme `json:"values"`
-}
-
 // Filter returns any boards which use the provided filter id.
 // This method can be executed by users without a valid software license in order
 // to find which boards are using a particular filter.
 // Docs: N/A
-func (b *BoardService) Filter(ctx context.Context, filterID, startAt, maxResults int) (result *BoardPageScheme, response *ResponseScheme, err error) {
+func (b *BoardService) Filter(ctx context.Context, filterID, startAt, maxResults int) (result *model.BoardPageScheme, response *ResponseScheme, err error) {
 
 	if filterID == 0 {
-		return nil, nil, fmt.Errorf("error!, please provide a valid filterID value")
+		return nil, nil, model.ErrNoFilterIDError
 	}
 
 	params := url.Values{}
@@ -117,24 +97,6 @@ func (b *BoardService) Filter(ctx context.Context, filterID, startAt, maxResults
 	return
 }
 
-type BoardScheme struct {
-	ID       int                  `json:"id,omitempty"`
-	Self     string               `json:"self,omitempty"`
-	Name     string               `json:"name,omitempty"`
-	Type     string               `json:"type,omitempty"`
-	Location *BoardLocationScheme `json:"location,omitempty"`
-}
-
-type BoardLocationScheme struct {
-	ProjectID      int    `json:"projectId,omitempty"`
-	DisplayName    string `json:"displayName,omitempty"`
-	ProjectName    string `json:"projectName,omitempty"`
-	ProjectKey     string `json:"projectKey,omitempty"`
-	ProjectTypeKey string `json:"projectTypeKey,omitempty"`
-	AvatarURI      string `json:"avatarURI,omitempty"`
-	Name           string `json:"name,omitempty"`
-}
-
 // Backlog returns all issues from the board's backlog, for the given board ID.
 // This only includes issues that the user has permission to view.
 // The backlog contains incomplete issues that are not assigned to any future or active sprint.
@@ -142,10 +104,10 @@ type BoardLocationScheme struct {
 // Issues returned from this resource include Agile fields, like sprint, closedSprints, flagged, and epic.
 // By default, the returned issues are ordered by rank.
 // Docs: N/A
-func (b *BoardService) Backlog(ctx context.Context, boardID, startAt, maxResults int, opts *IssueOptionScheme) (result *BoardIssuePageScheme, response *ResponseScheme, err error) {
+func (b *BoardService) Backlog(ctx context.Context, boardID, startAt, maxResults int, opts *model.IssueOptionScheme) (result *model.BoardIssuePageScheme, response *ResponseScheme, err error) {
 
 	if boardID == 0 {
-		return nil, nil, fmt.Errorf("error!, please provide a valid boardID value")
+		return nil, nil, model.ErrNoBoardIDError
 	}
 
 	params := url.Values{}
@@ -191,25 +153,12 @@ func (b *BoardService) Backlog(ctx context.Context, boardID, startAt, maxResults
 	return
 }
 
-type BoardIssuePageScheme struct {
-	Expand     string `json:"expand"`
-	StartAt    int    `json:"startAt"`
-	MaxResults int    `json:"maxResults"`
-	Total      int    `json:"total"`
-	Issues     []struct {
-		Expand string `json:"expand"`
-		ID     string `json:"id"`
-		Self   string `json:"self"`
-		Key    string `json:"key"`
-	} `json:"issues"`
-}
-
 // Configuration get the board configuration.
 // Docs: N/A
-func (b *BoardService) Configuration(ctx context.Context, boardID int) (result *BoardConfigurationScheme, response *ResponseScheme, err error) {
+func (b *BoardService) Configuration(ctx context.Context, boardID int) (result *model.BoardConfigurationScheme, response *ResponseScheme, err error) {
 
 	if boardID == 0 {
-		return nil, nil, fmt.Errorf("error!, please provide a valid boardID value")
+		return nil, nil, model.ErrNoBoardIDError
 	}
 
 	var endpoint = fmt.Sprintf("/rest/agile/1.0/board/%v/configuration", boardID)
@@ -229,59 +178,13 @@ func (b *BoardService) Configuration(ctx context.Context, boardID int) (result *
 	return
 }
 
-type BoardConfigurationScheme struct {
-	ID           int                             `json:"id,omitempty"`
-	Name         string                          `json:"name,omitempty"`
-	Type         string                          `json:"type,omitempty"`
-	Self         string                          `json:"self,omitempty"`
-	Location     *BoardLocationScheme            `json:"location,omitempty"`
-	Filter       *BoardFilterScheme              `json:"filter,omitempty"`
-	ColumnConfig *BoardColumnConfigurationScheme `json:"columnConfig,omitempty"`
-	Estimation   *BoardEstimationScheme          `json:"estimation,omitempty"`
-	Ranking      *BoardRankingScheme             `json:"ranking,omitempty"`
-}
-
-type BoardFilterScheme struct {
-	ID   string `json:"id,omitempty"`
-	Self string `json:"self,omitempty"`
-}
-
-type BoardRankingScheme struct {
-	RankCustomFieldID int `json:"rankCustomFieldId,omitempty"`
-}
-
-type BoardEstimationScheme struct {
-	Type  string                      `json:"type,omitempty"`
-	Field *BoardEstimationFieldScheme `json:"field,omitempty"`
-}
-
-type BoardEstimationFieldScheme struct {
-	FieldID     string `json:"fieldId,omitempty"`
-	DisplayName string `json:"displayName,omitempty"`
-}
-
-type BoardColumnConfigurationScheme struct {
-	Columns        []*BoardColumnScheme `json:"columns,omitempty"`
-	ConstraintType string               `json:"constraintType,omitempty"`
-}
-
-type BoardColumnScheme struct {
-	Name     string                     `json:"name,omitempty"`
-	Statuses []*BoardColumnStatusScheme `json:"statuses,omitempty"`
-}
-
-type BoardColumnStatusScheme struct {
-	ID   string `json:"id,omitempty"`
-	Self string `json:"self,omitempty"`
-}
-
 // Epics returns all epics from the board, for the given board ID.
 // This only includes epics that the user has permission to view.
 // Note, if the user does not have permission to view the board, no epics will be returned at all.
-func (b *BoardService) Epics(ctx context.Context, boardID, startAt, maxResults int, done bool) (result *BoardEpicPageScheme, response *ResponseScheme, err error) {
+func (b *BoardService) Epics(ctx context.Context, boardID, startAt, maxResults int, done bool) (result *model.BoardEpicPageScheme, response *ResponseScheme, err error) {
 
 	if boardID == 0 {
-		return nil, nil, fmt.Errorf("error!, please provide a valid boardID value")
+		return nil, nil, model.ErrNoBoardIDError
 	}
 
 	params := url.Values{}
@@ -311,35 +214,16 @@ func (b *BoardService) Epics(ctx context.Context, boardID, startAt, maxResults i
 	return
 }
 
-type BoardEpicPageScheme struct {
-	MaxResults int                `json:"maxResults,omitempty"`
-	StartAt    int                `json:"startAt,omitempty"`
-	IsLast     bool               `json:"isLast,omitempty"`
-	Values     []*BoardEpicScheme `json:"values,omitempty"`
-}
-
-type BoardEpicScheme struct {
-	ID      int    `json:"id,omitempty"`
-	Key     string `json:"key,omitempty"`
-	Self    string `json:"self,omitempty"`
-	Name    string `json:"name,omitempty"`
-	Summary string `json:"summary,omitempty"`
-	Color   struct {
-		Key string `json:"key,omitempty"`
-	} `json:"color,omitempty"`
-	Done bool `json:"done,omitempty"`
-}
-
 // IssuesWithoutEpic returns all issues that do not belong to any epic on a board, for a given board ID.
 // This only includes issues that the user has permission to view.
 // Issues returned from this resource include Agile fields, like sprint, closedSprints, flagged, and epic.
 // By default, the returned issues are ordered by rank.
 // Docs: N/A
-func (b *BoardService) IssuesWithoutEpic(ctx context.Context, boardID, startAt, maxResults int, opts *IssueOptionScheme) (
-	result *BoardIssuePageScheme, response *ResponseScheme, err error) {
+func (b *BoardService) IssuesWithoutEpic(ctx context.Context, boardID, startAt, maxResults int, opts *model.IssueOptionScheme) (
+	result *model.BoardIssuePageScheme, response *ResponseScheme, err error) {
 
 	if boardID == 0 {
-		return nil, nil, fmt.Errorf("error!, please provide a valid boardID value")
+		return nil, nil, model.ErrNoBoardIDError
 	}
 
 	params := url.Values{}
@@ -408,15 +292,15 @@ func (b *BoardService) IssuesWithoutEpic(ctx context.Context, boardID, startAt,
 // This only includes issues that the user has permission to view.
 // Issues returned from this resource include Agile fields, like sprint, closedSprints,
 // flagged, and epic. By default, the returned issues are ordered by rank.
-func (b *BoardService) IssuesByEpic(ctx context.Context, boardID, epicID, startAt, maxResults int, opts *IssueOptionScheme) (
-	result *BoardIssuePageScheme, response *ResponseScheme, err error) {
+func (b *BoardService) IssuesByEpic(ctx context.Context, boardID, epicID, startAt, maxResults int, opts *model.IssueOptionScheme) (
+	result *model.BoardIssuePageScheme, response *ResponseScheme, err error) {
 
 	if boardID == 0 {
-		return nil, nil, fmt.Errorf("error!, please provide a valid boardID value")
+		return nil, nil, model.ErrNoBoardIDError
 	}
 
 	if epicID == 0 {
-		return nil, nil, fmt.Errorf("error!, please provide a valid epicID value")
+		return nil, nil, model.ErrNoEpicIDError
 	}
 
 	params := url.Values{}
@@ -468,11 +352,11 @@ func (b *BoardService) IssuesByEpic(ctx context.Context, boardID, epicID, startA
 // Issues returned from this resource include Agile fields, like sprint, closedSprints, flagged, and epic.
 // By default, the returned issues are ordered by rank.
 // Docs: N/A
-func (b *BoardService) Issues(ctx context.Context, boardID, startAt, maxResults int, opts *IssueOptionScheme) (
-	result *BoardIssuePageScheme, response *ResponseScheme, err error) {
+func (b *BoardService) Issues(ctx context.Context, boardID, startAt, maxResults int, opts *model.IssueOptionScheme) (
+	result *model.BoardIssuePageScheme, response *ResponseScheme, err error) {
 
 	if boardID == 0 {
-		return nil, nil, fmt.Errorf("error!, please provide a valid boardID value")
+		return nil, nil, model.ErrNoBoardIDError
 	}
 
 	params := url.Values{}
@@ -516,23 +400,16 @@ func (b *BoardService) Issues(ctx context.Context, boardID, startAt, maxResults
 	return
 }
 
-type BoardMovementPayloadScheme struct {
-	Issues            []string `json:"issues,omitempty"`
-	RankBeforeIssue   string   `json:"rankBeforeIssue,omitempty"`
-	RankAfterIssue    string   `json:"rankAfterIssue,omitempty"`
-	RankCustomFieldID int      `json:"rankCustomFieldId,omitempty"`
-}
-
 // Move issues from the backlog to the board (if they are already in the backlog of that board).
 // This operation either moves an issue(s) onto a board from the backlog (by adding it to the issueList for the board)
 // Or transitions the issue(s) to the first column for a kanban board with backlog.
 // At most 50 issues may be moved at once.
 // Docs: N/A
 // Atlassian Docs: https://developer.atlassian.com/cloud/jira/software/rest/api-group-board/#api-agile-1-0-board-boardid-issue-post
-func (b *BoardService) Move(ctx context.Context, boardID int, payload *BoardMovementPayloadScheme) (response *ResponseScheme, err error) {
+func (b *BoardService) Move(ctx context.Context, boardID int, payload *model.BoardMovementPayloadScheme) (response *ResponseScheme, err error) {
 
 	if boardID == 0 {
-		return nil, fmt.Errorf("error!, please provide a valid boardID value")
+		return nil, model.ErrNoBoardIDError
 	}
 
 	payloadAsReader, err := transformStructToReader(payload)
@@ -557,47 +434,16 @@ func (b *BoardService) Move(ctx context.Context, boardID int, payload *BoardMove
 	return
 }
 
-type BoardProjectPageScheme struct {
-	MaxResults int                   `json:"maxResults,omitempty"`
-	StartAt    int                   `json:"startAt,omitempty"`
-	Total      int                   `json:"total,omitempty"`
-	IsLast     bool                  `json:"isLast,omitempty"`
-	Values     []*BoardProjectScheme `json:"values,omitempty"`
-}
-
-type BoardProjectScheme struct {
-	Self            string                      `json:"self,omitempty"`
-	ID              string                      `json:"id,omitempty"`
-	Key             string                      `json:"key,omitempty"`
-	Name            string                      `json:"name,omitempty"`
-	ProjectCategory *BoardProjectCategoryScheme `json:"projectCategory,omitempty"`
-	Simplified      bool                        `json:"simplified,omitempty"`
-	Style           string                      `json:"style,omitempty"`
-	Insight         *BoardProjectInsightScheme  `json:"insight,omitempty"`
-}
-
-type BoardProjectCategoryScheme struct {
-	Self        string `json:"self,omitempty"`
-	ID          string `json:"id,omitempty"`
-	Name        string `json:"name,omitempty"`
-	Description string `json:"description,omitempty"`
-}
-
-type BoardProjectInsightScheme struct {
-	TotalIssueCount     int    `json:"totalIssueCount,omitempty"`
-	LastIssueUpdateTime string `json:"lastIssueUpdateTime,omitempty"`
-}
-
 // Projects returns all projects that are associated with the board, for the given board ID.
 // If the user does not have permission to view the board, no projects will be returned at all.
 // Returned projects are ordered by the name.
 // Docs: N/A
 // Atlassian Docs: https://developer.atlassian.com/cloud/jira/software/rest/api-group-board/#api-agile-1-0-board-boardid-project-get
 func (b *BoardService) Projects(ctx context.Context, boardID, startAt, maxResults int) (
-	result *BoardProjectPageScheme, response *ResponseScheme, err error) {
+	result *model.BoardProjectPageScheme, response *ResponseScheme, err error) {
 
 	if boardID == 0 {
-		return nil, nil, fmt.Errorf("error!, please provide a valid boardID value")
+		return nil, nil, model.ErrNoBoardIDError
 	}
 
 	params := url.Values{}
@@ -621,35 +467,15 @@ func (b *BoardService) Projects(ctx context.Context, boardID, startAt, maxResult
 	return
 }
 
-type BoardSprintPageScheme struct {
-	MaxResults int                  `json:"maxResults,omitempty"`
-	StartAt    int                  `json:"startAt,omitempty"`
-	IsLast     bool                 `json:"isLast,omitempty"`
-	Total      int                  `json:"total,omitempty"`
-	Values     []*BoardSprintScheme `json:"values,omitempty"`
-}
-
-type BoardSprintScheme struct {
-	ID            int       `json:"id,omitempty"`
-	Self          string    `json:"self,omitempty"`
-	State         string    `json:"state,omitempty"`
-	Name          string    `json:"name,omitempty"`
-	StartDate     time.Time `json:"startDate,omitempty"`
-	EndDate       time.Time `json:"endDate,omitempty"`
-	CompleteDate  time.Time `json:"completeDate,omitempty"`
-	OriginBoardID int       `json:"originBoardId,omitempty"`
-	Goal          string    `json:"goal,omitempty"`
-}
-
 // Sprints returns all sprints from a board, for a given board ID.
 // This only includes sprints that the user has permission to view.
 // Docs: N/A
 // Atlassian Docs: https://developer.atlassian.com/cloud/jira/software/rest/api-group-board/#api-agile-1-0-board-boardid-sprint-get
 func (b *BoardService) Sprints(ctx context.Context, boardID, startAt, maxResults int, states []string) (
-	result *BoardSprintPageScheme, response *ResponseScheme, err error) {
+	result *model.BoardSprintPageScheme, response *ResponseScheme, err error) {
 
 	if boardID == 0 {
-		return nil, nil, fmt.Errorf("error!, please provide a valid boardID value")
+		return nil, nil, model.ErrNoBoardIDError
 	}
 
 	params := url.Values{}
@@ -678,14 +504,14 @@ func (b *BoardService) Sprints(ctx context.Context, boardID, startAt, maxResults
 // Issue returned from this resource contains additional fields like: sprint, closedSprints, flagged and epic.
 // Issues are returned ordered by rank. JQL order has higher priority than default rank.
 func (b *BoardService) IssuesBySprint(ctx context.Context, boardID, sprintID, startAt, maxResults int,
-	opts *IssueOptionScheme) (result *BoardIssuePageScheme, response *ResponseScheme, err error) {
+	opts *model.IssueOptionScheme) (result *model.BoardIssuePageScheme, response *ResponseScheme, err error) {
 
 	if boardID == 0 {
-		return nil, nil, fmt.Errorf("error!, please provide a valid boardID value")
+		return nil, nil, model.ErrNoBoardIDError
 	}
 
 	if sprintID == 0 {
-		return nil, nil, fmt.Errorf("error!, please provide a valid sprintID value")
+		return nil, nil, model.ErrNoSprintIDError
 	}
 
 	params := url.Values{}
@@ -728,24 +554,6 @@ func (b *BoardService) IssuesBySprint(ctx context.Context, boardID, sprintID, st
 	return
 }
 
-type BoardVersionPageScheme struct {
-	MaxResults int                   `json:"maxResults,omitempty"`
-	StartAt    int                   `json:"startAt,omitempty"`
-	IsLast     bool                  `json:"isLast,omitempty"`
-	Values     []*BoardVersionScheme `json:"values,omitempty"`
-}
-
-type BoardVersionScheme struct {
-	Self        string    `json:"self,omitempty"`
-	ID          int       `json:"id,omitempty"`
-	ProjectID   int       `json:"projectId,omitempty"`
-	Name        string    `json:"name,omitempty"`
-	Description string    `json:"description,omitempty"`
-	Archived    bool      `json:"archived,omitempty"`
-	Released    bool      `json:"released,omitempty"`
-	ReleaseDate time.Time `json:"releaseDate,omitempty"`
-}
-
 // Versions returns all versions from a board, for a given board ID.
 // This only includes versions that the user has permission to view.
 // Note, if the user does not have permission to view the board, no versions will be returned at all.
@@ -753,10 +561,10 @@ type BoardVersionScheme struct {
 // Docs: N/A
 // Atlassian Docs: https://developer.atlassian.com/cloud/jira/software/rest/api-group-board/#api-agile-1-0-board-boardid-version-get
 func (b *BoardService) Versions(ctx context.Context, boardID, startAt, maxResults int, released bool) (
-	result *BoardVersionPageScheme, response *ResponseScheme, err error) {
+	result *model.BoardVersionPageScheme, response *ResponseScheme, err error) {
 
 	if boardID == 0 {
-		return nil, nil, fmt.Errorf("error!, please provide a valid boardID value")
+		return nil, nil, model.ErrNoBoardIDError
 	}
 
 	params := url.Values{}
@@ -792,7 +600,7 @@ func (b *BoardService) Versions(ctx context.Context, boardID, startAt, maxResult
 func (b *BoardService) Delete(ctx context.Context, boardID int) (response *ResponseScheme, err error) {
 
 	if boardID == 0 {
-		return nil, fmt.Errorf("error!, please provide a valid boardID value")
+		return nil, model.ErrNoBoardIDError
 	}
 
 	var endpoint = fmt.Sprintf("/rest/agile/1.0/board/%v", boardID)
@@ -810,22 +618,9 @@ func (b *BoardService) Delete(ctx context.Context, boardID int) (response *Respo
 	return
 }
 
-type GetBoardsOptions struct {
-	BoardType               string
-	BoardName               string
-	ProjectKeyOrID          string
-	AccountIDLocation       string
-	ProjectIDLocation       string
-	IncludePrivate          bool
-	NegateLocationFiltering bool
-	OrderBy                 string
-	Expand                  string
-	FilterID                int
-}
-
 // Gets returns all boards. This only includes boards that the user has permission to view.
 // Docs: https://developer.atlassian.com/cloud/jira/software/rest/api-group-other-operations/#api-agile-1-0-board-get
-func (b *BoardService) Gets(ctx context.Context, opts *GetBoardsOptions, startAt, maxResults int) (result *BoardPageScheme, response *ResponseScheme, err error) {
+func (b *BoardService) Gets(ctx context.Context, opts *model.GetBoardsOptions, startAt, maxResults int) (result *model.BoardPageScheme, response *ResponseScheme, err error) {
 
 	params := url.Values{}
 	params.Add("startAt", strconv.Itoa(startAt))
diff --git a/jira/agile/epic.go b/jira/agile/epic.go
index b82ce09..eae0470 100644
--- a/jira/agile/epic.go
+++ b/jira/agile/epic.go
@@ -3,6 +3,7 @@ package agile
 import (
 	"context"
 	"fmt"
+	model "github.com/ctreminiom/go-atlassian/pkg/infra/models/agile"
 	"net/http"
 	"net/url"
 	"strconv"
@@ -11,26 +12,13 @@ import (
 
 type EpicService struct{ client *Client }
 
-type EpicScheme struct {
-	ID      int              `json:"id,omitempty"`
-	Key     string           `json:"key,omitempty"`
-	Self    string           `json:"self,omitempty"`
-	Name    string           `json:"name,omitempty"`
-	Summary string           `json:"summary,omitempty"`
-	Color   *EpicColorScheme `json:"color,omitempty"`
-	Done    bool             `json:"done,omitempty"`
-}
-type EpicColorScheme struct {
-	Key string `json:"key,omitempty"`
-}
-
 // Get returns the epic for a given epic ID.
 // This epic will only be returned if the user has permission to view it.
 // Note: This operation does not work for epics in next-gen projects.
-func (e *EpicService) Get(ctx context.Context, epicIDOrKey string) (result *EpicScheme, response *ResponseScheme, err error) {
+func (e *EpicService) Get(ctx context.Context, epicIDOrKey string) (result *model.EpicScheme, response *ResponseScheme, err error) {
 
 	if len(epicIDOrKey) == 0 {
-		return nil, nil, fmt.Errorf("error!, please provide a valid epicIDOrKey value")
+		return nil, nil, model.ErrNoEpicIDError
 	}
 
 	var endpoint = fmt.Sprintf("/rest/agile/1.0/epic/%v", epicIDOrKey)
@@ -58,10 +46,10 @@ func (e *EpicService) Get(ctx context.Context, epicIDOrKey string) (result *Epic
 // Atlassian Docs: https://developer.atlassian.com/cloud/jira/software/rest/api-group-epic/#api-agile-1-0-epic-epicidorkey-issue-get
 // Library Docs: N/A
 func (e *EpicService) Issues(ctx context.Context, epicIDOrKey string, startAt, maxResults int,
-	opts *IssueOptionScheme) (result *BoardIssuePageScheme, response *ResponseScheme, err error) {
+	opts *model.IssueOptionScheme) (result *model.BoardIssuePageScheme, response *ResponseScheme, err error) {
 
 	if len(epicIDOrKey) == 0 {
-		return nil, nil, fmt.Errorf("error!, please provide a valid epicIDOrKey value")
+		return nil, nil, model.ErrNoEpicIDError
 	}
 
 	params := url.Values{}
diff --git a/jira/agile/sprint.go b/jira/agile/sprint.go
index dab7f65..f4d9f59 100644
--- a/jira/agile/sprint.go
+++ b/jira/agile/sprint.go
@@ -3,11 +3,11 @@ package agile
 import (
 	"context"
 	"fmt"
+	model "github.com/ctreminiom/go-atlassian/pkg/infra/models/agile"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
-	"time"
 )
 
 type SprintService struct{ client *Client }
@@ -15,10 +15,10 @@ type SprintService struct{ client *Client }
 // Get Returns the sprint for a given sprint ID.
 // The sprint will only be returned if the user can view the board that the sprint was created on,
 // or view at least one of the issues in the sprint.
-func (s *SprintService) Get(ctx context.Context, sprintID int) (result *SprintScheme, response *ResponseScheme, err error) {
+func (s *SprintService) Get(ctx context.Context, sprintID int) (result *model.SprintScheme, response *ResponseScheme, err error) {
 
 	if sprintID == 0 {
-		return nil, nil, fmt.Errorf("error!, please provide a valid sprint ID")
+		return nil, nil, model.ErrNoSprintIDError
 	}
 
 	var endpoint = fmt.Sprintf("rest/agile/1.0/sprint/%v", sprintID)
@@ -35,26 +35,13 @@ func (s *SprintService) Get(ctx context.Context, sprintID int) (result *SprintSc
 		return nil, response, err
 	}
 
-
 	return
 }
 
-type SprintScheme struct {
-	ID            int       `json:"id,omitempty"`
-	Self          string    `json:"self,omitempty"`
-	State         string    `json:"state,omitempty"`
-	Name          string    `json:"name,omitempty"`
-	StartDate     time.Time `json:"startDate,omitempty"`
-	EndDate       time.Time `json:"endDate,omitempty"`
-	CompleteDate  time.Time `json:"completeDate,omitempty"`
-	OriginBoardID int       `json:"originBoardId,omitempty"`
-	Goal          string    `json:"goal,omitempty"`
-}
-
 // Create creates a future sprint.
 // Sprint name and origin board id are required.
 // Start date, end date, and goal are optional.
-func (s *SprintService) Create(ctx context.Context, payload *SprintPayloadScheme) (result *SprintScheme,
+func (s *SprintService) Create(ctx context.Context, payload *model.SprintPayloadScheme) (result *model.SprintScheme,
 	response *ResponseScheme, err error) {
 
 	payloadAsReader, err := transformStructToReader(payload)
@@ -80,23 +67,14 @@ func (s *SprintService) Create(ctx context.Context, payload *SprintPayloadScheme
 	return
 }
 
-type SprintPayloadScheme struct {
-	Name          string `json:"name,omitempty"`
-	StartDate     string `json:"startDate,omitempty"`
-	EndDate       string `json:"endDate,omitempty"`
-	OriginBoardID int    `json:"originBoardId,omitempty"`
-	Goal          string `json:"goal,omitempty"`
-	State         string `json:"state,omitempty"`
-}
-
 // Update Performs a full update of a sprint.
 // A full update means that the result will be exactly the same as the request body.
 // Any fields not present in the request JSON will be set to null.
-func (s *SprintService) Update(ctx context.Context, sprintID int, payload *SprintPayloadScheme) (result *SprintScheme,
+func (s *SprintService) Update(ctx context.Context, sprintID int, payload *model.SprintPayloadScheme) (result *model.SprintScheme,
 	response *ResponseScheme, err error) {
 
 	if sprintID == 0 {
-		return nil, nil, fmt.Errorf("error!, please provide a valid sprint ID")
+		return nil, nil, model.ErrNoSprintIDError
 	}
 
 	var endpoint = fmt.Sprintf("rest/agile/1.0/sprint/%v", sprintID)
@@ -124,11 +102,11 @@ func (s *SprintService) Update(ctx context.Context, sprintID int, payload *Sprin
 
 // Path Performs a partial update of a sprint.
 // A partial update means that fields not present in the request JSON will not be updated.
-func (s *SprintService) Path(ctx context.Context, sprintID int, payload *SprintPayloadScheme) (result *SprintScheme,
+func (s *SprintService) Path(ctx context.Context, sprintID int, payload *model.SprintPayloadScheme) (result *model.SprintScheme,
 	response *ResponseScheme, err error) {
 
 	if sprintID == 0 {
-		return nil, nil, fmt.Errorf("error!, please provide a valid sprint ID")
+		return nil, nil, model.ErrNoSprintIDError
 	}
 
 	var endpoint = fmt.Sprintf("rest/agile/1.0/sprint/%v", sprintID)
@@ -159,7 +137,7 @@ func (s *SprintService) Path(ctx context.Context, sprintID int, payload *SprintP
 func (s *SprintService) Delete(ctx context.Context, sprintID int) (response *ResponseScheme, err error) {
 
 	if sprintID == 0 {
-		return nil, fmt.Errorf("error!, please provide a valid sprint ID")
+		return nil, model.ErrNoSprintIDError
 	}
 
 	var endpoint = fmt.Sprintf("rest/agile/1.0/sprint/%v", sprintID)
@@ -177,20 +155,14 @@ func (s *SprintService) Delete(ctx context.Context, sprintID int) (response *Res
 	return
 }
 
-type IssueOptionScheme struct {
-	JQL            string
-	ValidateQuery  bool
-	Fields, Expand []string
-}
-
 // Issues returns all issues in a sprint, for a given sprint ID.
 // This only includes issues that the user has permission to view.
 // By default, the returned issues are ordered by rank.
-func (s *SprintService) Issues(ctx context.Context, sprintID int, opts *IssueOptionScheme, startAt, maxResults int) (
-	result *SprintIssuePageScheme, response *ResponseScheme, err error) {
+func (s *SprintService) Issues(ctx context.Context, sprintID int, opts *model.IssueOptionScheme, startAt, maxResults int) (
+	result *model.SprintIssuePageScheme, response *ResponseScheme, err error) {
 
 	if sprintID == 0 {
-		return nil, nil, fmt.Errorf("error!, please provide a valid sprint ID")
+		return nil, nil, model.ErrNoSprintIDError
 	}
 
 	params := url.Values{}
@@ -231,29 +203,14 @@ func (s *SprintService) Issues(ctx context.Context, sprintID int, opts *IssueOpt
 	return
 }
 
-type SprintIssuePageScheme struct {
-	Expand     string               `json:"expand,omitempty"`
-	StartAt    int                  `json:"startAt,omitempty"`
-	MaxResults int                  `json:"maxResults,omitempty"`
-	Total      int                  `json:"total,omitempty"`
-	Issues     []*SprintIssueScheme `json:"issues,omitempty"`
-}
-
-type SprintIssueScheme struct {
-	Expand string `json:"expand,omitempty"`
-	ID     string `json:"id,omitempty"`
-	Self   string `json:"self,omitempty"`
-	Key    string `json:"key,omitempty"`
-}
-
 // Start initiate the Sprint
 func (s *SprintService) Start(ctx context.Context, sprintID int) (response *ResponseScheme, err error) {
 
 	if sprintID == 0 {
-		return nil, fmt.Errorf("error!, please provide a valid sprint ID")
+		return nil, model.ErrNoSprintIDError
 	}
 
-	payload := SprintPayloadScheme{
+	payload := model.SprintPayloadScheme{
 		State: "Active",
 	}
 
@@ -281,10 +238,10 @@ func (s *SprintService) Start(ctx context.Context, sprintID int) (response *Resp
 func (s *SprintService) Close(ctx context.Context, sprintID int) (response *ResponseScheme, err error) {
 
 	if sprintID == 0 {
-		return nil, fmt.Errorf("error!, please provide a valid sprint ID")
+		return nil, model.ErrNoSprintIDError
 	}
 
-	payload := SprintPayloadScheme{
+	payload := model.SprintPayloadScheme{
 		State: "Closed",
 	}
 
diff --git a/jira/agile/mocks/empty-json.json b/jira/mocks/empty-json.json
similarity index 100%
rename from jira/agile/mocks/empty-json.json
rename to jira/mocks/empty-json.json
diff --git a/jira/agile/mocks/get-board-backlog.json b/jira/mocks/get-board-backlog.json
similarity index 100%
rename from jira/agile/mocks/get-board-backlog.json
rename to jira/mocks/get-board-backlog.json
diff --git a/jira/agile/mocks/get-board-config.json b/jira/mocks/get-board-config.json
similarity index 100%
rename from jira/agile/mocks/get-board-config.json
rename to jira/mocks/get-board-config.json
diff --git a/jira/agile/mocks/get-board-epics.json b/jira/mocks/get-board-epics.json
similarity index 100%
rename from jira/agile/mocks/get-board-epics.json
rename to jira/mocks/get-board-epics.json
diff --git a/jira/agile/mocks/get-board-issue-by-epic.json b/jira/mocks/get-board-issue-by-epic.json
similarity index 100%
rename from jira/agile/mocks/get-board-issue-by-epic.json
rename to jira/mocks/get-board-issue-by-epic.json
diff --git a/jira/agile/mocks/get-board-issue-without-epic.json b/jira/mocks/get-board-issue-without-epic.json
similarity index 100%
rename from jira/agile/mocks/get-board-issue-without-epic.json
rename to jira/mocks/get-board-issue-without-epic.json
diff --git a/jira/agile/mocks/get-board-issues.json b/jira/mocks/get-board-issues.json
similarity index 100%
rename from jira/agile/mocks/get-board-issues.json
rename to jira/mocks/get-board-issues.json
diff --git a/jira/agile/mocks/get-board-projects.json b/jira/mocks/get-board-projects.json
similarity index 100%
rename from jira/agile/mocks/get-board-projects.json
rename to jira/mocks/get-board-projects.json
diff --git a/jira/agile/mocks/get-board-sprints.json b/jira/mocks/get-board-sprints.json
similarity index 100%
rename from jira/agile/mocks/get-board-sprints.json
rename to jira/mocks/get-board-sprints.json
diff --git a/jira/agile/mocks/get-board-versions.json b/jira/mocks/get-board-versions.json
similarity index 100%
rename from jira/agile/mocks/get-board-versions.json
rename to jira/mocks/get-board-versions.json
diff --git a/jira/agile/mocks/get-board.json b/jira/mocks/get-board.json
similarity index 100%
rename from jira/agile/mocks/get-board.json
rename to jira/mocks/get-board.json
diff --git a/jira/agile/mocks/get-boards-by-filter-id.json b/jira/mocks/get-boards-by-filter-id.json
similarity index 100%
rename from jira/agile/mocks/get-boards-by-filter-id.json
rename to jira/mocks/get-boards-by-filter-id.json
diff --git a/jira/agile/mocks/get-epic-issues.json b/jira/mocks/get-epic-issues.json
similarity index 100%
rename from jira/agile/mocks/get-epic-issues.json
rename to jira/mocks/get-epic-issues.json
diff --git a/jira/agile/mocks/get-epic.json b/jira/mocks/get-epic.json
similarity index 100%
rename from jira/agile/mocks/get-epic.json
rename to jira/mocks/get-epic.json
diff --git a/jira/agile/mocks/get-issues-by-sprint.json b/jira/mocks/get-issues-by-sprint.json
similarity index 100%
rename from jira/agile/mocks/get-issues-by-sprint.json
rename to jira/mocks/get-issues-by-sprint.json
diff --git a/jira/agile/mocks/get-sprint-by-id.json b/jira/mocks/get-sprint-by-id.json
similarity index 100%
rename from jira/agile/mocks/get-sprint-by-id.json
rename to jira/mocks/get-sprint-by-id.json
diff --git a/jira/agile/mocks/get-sprint-issues.json b/jira/mocks/get-sprint-issues.json
similarity index 100%
rename from jira/agile/mocks/get-sprint-issues.json
rename to jira/mocks/get-sprint-issues.json
diff --git a/pkg/infra/models/agile/board.go b/pkg/infra/models/agile/board.go
new file mode 100644
index 0000000..1a33910
--- /dev/null
+++ b/pkg/infra/models/agile/board.go
@@ -0,0 +1,214 @@
+package agile
+
+import "time"
+
+type BoardPayloadScheme struct {
+	Name     string                      `json:"name,omitempty"`
+	Type     string                      `json:"type,omitempty"`
+	FilterID int                         `json:"filterId,omitempty"`
+	Location *BoardPayloadLocationScheme `json:"location,omitempty"`
+}
+
+type BoardPayloadLocationScheme struct {
+	Type           string `json:"type,omitempty"`
+	ProjectKeyOrID string `json:"projectKeyOrId,omitempty"`
+}
+
+type BoardPageScheme struct {
+	MaxResults int            `json:"maxResults"`
+	StartAt    int            `json:"startAt"`
+	Total      int            `json:"total"`
+	IsLast     bool           `json:"isLast"`
+	Values     []*BoardScheme `json:"values"`
+}
+
+type BoardScheme struct {
+	ID       int                  `json:"id,omitempty"`
+	Self     string               `json:"self,omitempty"`
+	Name     string               `json:"name,omitempty"`
+	Type     string               `json:"type,omitempty"`
+	Location *BoardLocationScheme `json:"location,omitempty"`
+}
+
+type BoardLocationScheme struct {
+	ProjectID      int    `json:"projectId,omitempty"`
+	DisplayName    string `json:"displayName,omitempty"`
+	ProjectName    string `json:"projectName,omitempty"`
+	ProjectKey     string `json:"projectKey,omitempty"`
+	ProjectTypeKey string `json:"projectTypeKey,omitempty"`
+	AvatarURI      string `json:"avatarURI,omitempty"`
+	Name           string `json:"name,omitempty"`
+}
+
+type BoardIssuePageScheme struct {
+	Expand     string `json:"expand"`
+	StartAt    int    `json:"startAt"`
+	MaxResults int    `json:"maxResults"`
+	Total      int    `json:"total"`
+	Issues     []struct {
+		Expand string `json:"expand"`
+		ID     string `json:"id"`
+		Self   string `json:"self"`
+		Key    string `json:"key"`
+	} `json:"issues"`
+}
+
+type BoardConfigurationScheme struct {
+	ID           int                             `json:"id,omitempty"`
+	Name         string                          `json:"name,omitempty"`
+	Type         string                          `json:"type,omitempty"`
+	Self         string                          `json:"self,omitempty"`
+	Location     *BoardLocationScheme            `json:"location,omitempty"`
+	Filter       *BoardFilterScheme              `json:"filter,omitempty"`
+	ColumnConfig *BoardColumnConfigurationScheme `json:"columnConfig,omitempty"`
+	Estimation   *BoardEstimationScheme          `json:"estimation,omitempty"`
+	Ranking      *BoardRankingScheme             `json:"ranking,omitempty"`
+}
+
+type BoardFilterScheme struct {
+	ID   string `json:"id,omitempty"`
+	Self string `json:"self,omitempty"`
+}
+
+type BoardRankingScheme struct {
+	RankCustomFieldID int `json:"rankCustomFieldId,omitempty"`
+}
+
+type BoardEstimationScheme struct {
+	Type  string                      `json:"type,omitempty"`
+	Field *BoardEstimationFieldScheme `json:"field,omitempty"`
+}
+
+type BoardEstimationFieldScheme struct {
+	FieldID     string `json:"fieldId,omitempty"`
+	DisplayName string `json:"displayName,omitempty"`
+}
+
+type BoardColumnConfigurationScheme struct {
+	Columns        []*BoardColumnScheme `json:"columns,omitempty"`
+	ConstraintType string               `json:"constraintType,omitempty"`
+}
+
+type BoardColumnScheme struct {
+	Name     string                     `json:"name,omitempty"`
+	Statuses []*BoardColumnStatusScheme `json:"statuses,omitempty"`
+}
+
+type BoardColumnStatusScheme struct {
+	ID   string `json:"id,omitempty"`
+	Self string `json:"self,omitempty"`
+}
+
+type BoardEpicPageScheme struct {
+	MaxResults int                `json:"maxResults,omitempty"`
+	StartAt    int                `json:"startAt,omitempty"`
+	IsLast     bool               `json:"isLast,omitempty"`
+	Values     []*BoardEpicScheme `json:"values,omitempty"`
+}
+
+type BoardEpicScheme struct {
+	ID      int    `json:"id,omitempty"`
+	Key     string `json:"key,omitempty"`
+	Self    string `json:"self,omitempty"`
+	Name    string `json:"name,omitempty"`
+	Summary string `json:"summary,omitempty"`
+	Color   struct {
+		Key string `json:"key,omitempty"`
+	} `json:"color,omitempty"`
+	Done bool `json:"done,omitempty"`
+}
+
+type BoardMovementPayloadScheme struct {
+	Issues            []string `json:"issues,omitempty"`
+	RankBeforeIssue   string   `json:"rankBeforeIssue,omitempty"`
+	RankAfterIssue    string   `json:"rankAfterIssue,omitempty"`
+	RankCustomFieldID int      `json:"rankCustomFieldId,omitempty"`
+}
+
+type BoardProjectPageScheme struct {
+	MaxResults int                   `json:"maxResults,omitempty"`
+	StartAt    int                   `json:"startAt,omitempty"`
+	Total      int                   `json:"total,omitempty"`
+	IsLast     bool                  `json:"isLast,omitempty"`
+	Values     []*BoardProjectScheme `json:"values,omitempty"`
+}
+
+type BoardProjectScheme struct {
+	Self            string                      `json:"self,omitempty"`
+	ID              string                      `json:"id,omitempty"`
+	Key             string                      `json:"key,omitempty"`
+	Name            string                      `json:"name,omitempty"`
+	ProjectCategory *BoardProjectCategoryScheme `json:"projectCategory,omitempty"`
+	Simplified      bool                        `json:"simplified,omitempty"`
+	Style           string                      `json:"style,omitempty"`
+	Insight         *BoardProjectInsightScheme  `json:"insight,omitempty"`
+}
+
+type BoardProjectCategoryScheme struct {
+	Self        string `json:"self,omitempty"`
+	ID          string `json:"id,omitempty"`
+	Name        string `json:"name,omitempty"`
+	Description string `json:"description,omitempty"`
+}
+
+type BoardProjectInsightScheme struct {
+	TotalIssueCount     int    `json:"totalIssueCount,omitempty"`
+	LastIssueUpdateTime string `json:"lastIssueUpdateTime,omitempty"`
+}
+
+type BoardSprintPageScheme struct {
+	MaxResults int                  `json:"maxResults,omitempty"`
+	StartAt    int                  `json:"startAt,omitempty"`
+	IsLast     bool                 `json:"isLast,omitempty"`
+	Total      int                  `json:"total,omitempty"`
+	Values     []*BoardSprintScheme `json:"values,omitempty"`
+}
+
+type BoardSprintScheme struct {
+	ID            int       `json:"id,omitempty"`
+	Self          string    `json:"self,omitempty"`
+	State         string    `json:"state,omitempty"`
+	Name          string    `json:"name,omitempty"`
+	StartDate     time.Time `json:"startDate,omitempty"`
+	EndDate       time.Time `json:"endDate,omitempty"`
+	CompleteDate  time.Time `json:"completeDate,omitempty"`
+	OriginBoardID int       `json:"originBoardId,omitempty"`
+	Goal          string    `json:"goal,omitempty"`
+}
+
+type BoardVersionPageScheme struct {
+	MaxResults int                   `json:"maxResults,omitempty"`
+	StartAt    int                   `json:"startAt,omitempty"`
+	IsLast     bool                  `json:"isLast,omitempty"`
+	Values     []*BoardVersionScheme `json:"values,omitempty"`
+}
+
+type BoardVersionScheme struct {
+	Self        string    `json:"self,omitempty"`
+	ID          int       `json:"id,omitempty"`
+	ProjectID   int       `json:"projectId,omitempty"`
+	Name        string    `json:"name,omitempty"`
+	Description string    `json:"description,omitempty"`
+	Archived    bool      `json:"archived,omitempty"`
+	Released    bool      `json:"released,omitempty"`
+	ReleaseDate time.Time `json:"releaseDate,omitempty"`
+}
+
+type GetBoardsOptions struct {
+	BoardType               string
+	BoardName               string
+	ProjectKeyOrID          string
+	AccountIDLocation       string
+	ProjectIDLocation       string
+	IncludePrivate          bool
+	NegateLocationFiltering bool
+	OrderBy                 string
+	Expand                  string
+	FilterID                int
+}
+
+type IssueOptionScheme struct {
+	JQL            string
+	ValidateQuery  bool
+	Fields, Expand []string
+}
diff --git a/pkg/infra/models/agile/epic.go b/pkg/infra/models/agile/epic.go
new file mode 100644
index 0000000..9b24f61
--- /dev/null
+++ b/pkg/infra/models/agile/epic.go
@@ -0,0 +1,14 @@
+package agile
+
+type EpicScheme struct {
+	ID      int              `json:"id,omitempty"`
+	Key     string           `json:"key,omitempty"`
+	Self    string           `json:"self,omitempty"`
+	Name    string           `json:"name,omitempty"`
+	Summary string           `json:"summary,omitempty"`
+	Color   *EpicColorScheme `json:"color,omitempty"`
+	Done    bool             `json:"done,omitempty"`
+}
+type EpicColorScheme struct {
+	Key string `json:"key,omitempty"`
+}
diff --git a/pkg/infra/models/agile/errors.go b/pkg/infra/models/agile/errors.go
new file mode 100644
index 0000000..004cef5
--- /dev/null
+++ b/pkg/infra/models/agile/errors.go
@@ -0,0 +1,10 @@
+package agile
+
+import "errors"
+
+var (
+	ErrNoBoardIDError  = errors.New("agile: no board id set")
+	ErrNoFilterIDError = errors.New("agile: no filter id set")
+	ErrNoEpicIDError   = errors.New("agile: no epic id set")
+	ErrNoSprintIDError = errors.New("agile: no sprint id set")
+)
diff --git a/pkg/infra/models/agile/sprint.go b/pkg/infra/models/agile/sprint.go
new file mode 100644
index 0000000..9c341af
--- /dev/null
+++ b/pkg/infra/models/agile/sprint.go
@@ -0,0 +1,39 @@
+package agile
+
+import "time"
+
+type SprintScheme struct {
+	ID            int       `json:"id,omitempty"`
+	Self          string    `json:"self,omitempty"`
+	State         string    `json:"state,omitempty"`
+	Name          string    `json:"name,omitempty"`
+	StartDate     time.Time `json:"startDate,omitempty"`
+	EndDate       time.Time `json:"endDate,omitempty"`
+	CompleteDate  time.Time `json:"completeDate,omitempty"`
+	OriginBoardID int       `json:"originBoardId,omitempty"`
+	Goal          string    `json:"goal,omitempty"`
+}
+
+type SprintPayloadScheme struct {
+	Name          string `json:"name,omitempty"`
+	StartDate     string `json:"startDate,omitempty"`
+	EndDate       string `json:"endDate,omitempty"`
+	OriginBoardID int    `json:"originBoardId,omitempty"`
+	Goal          string `json:"goal,omitempty"`
+	State         string `json:"state,omitempty"`
+}
+
+type SprintIssuePageScheme struct {
+	Expand     string               `json:"expand,omitempty"`
+	StartAt    int                  `json:"startAt,omitempty"`
+	MaxResults int                  `json:"maxResults,omitempty"`
+	Total      int                  `json:"total,omitempty"`
+	Issues     []*SprintIssueScheme `json:"issues,omitempty"`
+}
+
+type SprintIssueScheme struct {
+	Expand string `json:"expand,omitempty"`
+	ID     string `json:"id,omitempty"`
+	Self   string `json:"self,omitempty"`
+	Key    string `json:"key,omitempty"`
+}


Test patch:
diff --git a/jira/agile/agile_test.go b/jira/agile/agile_test.go
index 1c2889e..a26264a 100644
--- a/jira/agile/agile_test.go
+++ b/jira/agile/agile_test.go
@@ -3,6 +3,7 @@ package agile
 import (
 	"context"
 	"fmt"
+	model "github.com/ctreminiom/go-atlassian/pkg/infra/models/agile"
 	"github.com/stretchr/testify/assert"
 	"io"
 	"io/ioutil"
@@ -247,13 +248,13 @@ func Test_transformStructToReader(t *testing.T) {
 		{
 			name: "TransformStructToReaderWhenTheParametersAreCorrect",
 			args: args{
-				structure: &BoardPayloadScheme{
+				structure: &model.BoardPayloadScheme{
 					Name:     "DUMMY Board Name",
 					Type:     "scrum", //scrum or kanban
 					FilterID: 10016,
 
 					// Omit the Location if you want to the board to yourself (location)
-					Location: &BoardPayloadLocationScheme{
+					Location: &model.BoardPayloadLocationScheme{
 						ProjectKeyOrID: "KP",
 						Type:           "project",
 					},
@@ -289,10 +290,10 @@ func Test_transformTheHTTPResponse(t *testing.T) {
 	//Add the scenarios
 	responseConfigurations["badRequestResponseWithIncorrectFormat"] = map[string]interface{}{
 		"endpoint":      "/example",
-		"mock-response": "./mocks/get-contents.json",
+		"mock-response": "../mocks/get-contents.json",
 		"method":        http.MethodGet,
 		"status":        http.StatusBadRequest,
-		"closed?": false,
+		"closed?":       false,
 	}
 
 	responseConfigurations["badRequestResponseWithNotResponseBody"] = map[string]interface{}{
@@ -300,15 +301,15 @@ func Test_transformTheHTTPResponse(t *testing.T) {
 		"mock-response": "",
 		"method":        http.MethodGet,
 		"status":        http.StatusBadRequest,
-		"closed?": true,
+		"closed?":       true,
 	}
 
 	responseConfigurations["OkRequestResponseWithNotResponseBody"] = map[string]interface{}{
 		"endpoint":      "/",
-		"mock-response": "./mocks/get-contents.json",
+		"mock-response": "../mocks/get-contents.json",
 		"method":        http.MethodGet,
 		"status":        http.StatusOK,
-		"closed?": true,
+		"closed?":       true,
 	}
 
 	for scenario, configuration := range responseConfigurations {
diff --git a/jira/agile/board_test.go b/jira/agile/board_test.go
index bf00ca7..b3f0c42 100644
--- a/jira/agile/board_test.go
+++ b/jira/agile/board_test.go
@@ -3,6 +3,7 @@ package agile
 import (
 	"context"
 	"fmt"
+	model "github.com/ctreminiom/go-atlassian/pkg/infra/models/agile"
 	"github.com/stretchr/testify/assert"
 	"net/http"
 	"net/url"
@@ -24,7 +25,7 @@ func TestBoardService_Get(t *testing.T) {
 		{
 			name:               "GetBoardWhenTheParametersAreCorrect",
 			boardID:            1,
-			mockFile:           "./mocks/get-board.json",
+			mockFile:           "../mocks/get-board.json",
 			wantHTTPCodeReturn: http.StatusOK,
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/board/1",
@@ -35,7 +36,7 @@ func TestBoardService_Get(t *testing.T) {
 		{
 			name:               "GetBoardWhenTheBoardIsNotSet",
 			boardID:            0,
-			mockFile:           "./mocks/get-board.json",
+			mockFile:           "../mocks/get-board.json",
 			wantHTTPCodeReturn: http.StatusOK,
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/board/1",
@@ -46,7 +47,7 @@ func TestBoardService_Get(t *testing.T) {
 		{
 			name:               "GetBoardWhenTheRequestMethodIsIncorrect",
 			boardID:            1,
-			mockFile:           "./mocks/get-board.json",
+			mockFile:           "../mocks/get-board.json",
 			wantHTTPCodeReturn: http.StatusOK,
 			wantHTTPMethod:     http.MethodPost,
 			endpoint:           "/rest/agile/1.0/board/1",
@@ -57,7 +58,7 @@ func TestBoardService_Get(t *testing.T) {
 		{
 			name:               "GetBoardWhenTheContextIsNil",
 			boardID:            1,
-			mockFile:           "./mocks/get-board.json",
+			mockFile:           "../mocks/get-board.json",
 			wantHTTPCodeReturn: http.StatusOK,
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/board/1",
@@ -68,7 +69,7 @@ func TestBoardService_Get(t *testing.T) {
 		{
 			name:               "GetBoardWhenTheResponseStatusCodeIsIncorrect",
 			boardID:            1,
-			mockFile:           "./mocks/get-board.json",
+			mockFile:           "../mocks/get-board.json",
 			wantHTTPCodeReturn: http.StatusBadGateway,
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/board/1",
@@ -79,7 +80,7 @@ func TestBoardService_Get(t *testing.T) {
 		{
 			name:               "GetBoardWhenTheResponseBodyIsEmpty",
 			boardID:            1,
-			mockFile:           "./mocks/empty-json.json",
+			mockFile:           "../mocks/empty-json.json",
 			wantHTTPCodeReturn: http.StatusOK,
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/board/1",
@@ -153,7 +154,7 @@ func TestBoardService_Create(t *testing.T) {
 
 	testCases := []struct {
 		name               string
-		payload            *BoardPayloadScheme
+		payload            *model.BoardPayloadScheme
 		mockFile           string
 		wantHTTPMethod     string
 		endpoint           string
@@ -163,18 +164,18 @@ func TestBoardService_Create(t *testing.T) {
 	}{
 		{
 			name: "CreateBoardWhenTheParametersAreCorrect",
-			payload: &BoardPayloadScheme{
+			payload: &model.BoardPayloadScheme{
 				Name:     "DUMMY Board Name",
 				Type:     "scrum", //scrum or kanban
 				FilterID: 10016,
 
 				// Omit the Location if you want to the board to yourself (location)
-				Location: &BoardPayloadLocationScheme{
+				Location: &model.BoardPayloadLocationScheme{
 					ProjectKeyOrID: "KP",
 					Type:           "project",
 				},
 			},
-			mockFile:           "./mocks/get-board.json",
+			mockFile:           "../mocks/get-board.json",
 			wantHTTPCodeReturn: http.StatusOK,
 			wantHTTPMethod:     http.MethodPost,
 			endpoint:           "/rest/agile/1.0/board",
@@ -185,7 +186,7 @@ func TestBoardService_Create(t *testing.T) {
 		{
 			name:               "CreateBoardWhenTheBoardIsNotSet",
 			payload:            nil,
-			mockFile:           "./mocks/get-board.json",
+			mockFile:           "../mocks/get-board.json",
 			wantHTTPCodeReturn: http.StatusOK,
 			wantHTTPMethod:     http.MethodPost,
 			endpoint:           "/rest/agile/1.0/board/1",
@@ -195,18 +196,18 @@ func TestBoardService_Create(t *testing.T) {
 
 		{
 			name: "CreateBoardWhenTheRequestMethodIsIncorrect",
-			payload: &BoardPayloadScheme{
+			payload: &model.BoardPayloadScheme{
 				Name:     "DUMMY Board Name",
 				Type:     "scrum", //scrum or kanban
 				FilterID: 10016,
 
 				// Omit the Location if you want to the board to yourself (location)
-				Location: &BoardPayloadLocationScheme{
+				Location: &model.BoardPayloadLocationScheme{
 					ProjectKeyOrID: "KP",
 					Type:           "project",
 				},
 			},
-			mockFile:           "./mocks/get-board.json",
+			mockFile:           "../mocks/get-board.json",
 			wantHTTPCodeReturn: http.StatusOK,
 			wantHTTPMethod:     http.MethodHead,
 			endpoint:           "/rest/agile/1.0/board",
@@ -216,18 +217,18 @@ func TestBoardService_Create(t *testing.T) {
 
 		{
 			name: "CreateBoardWhenTheContextIsNil",
-			payload: &BoardPayloadScheme{
+			payload: &model.BoardPayloadScheme{
 				Name:     "DUMMY Board Name",
 				Type:     "scrum", //scrum or kanban
 				FilterID: 10016,
 
 				// Omit the Location if you want to the board to yourself (location)
-				Location: &BoardPayloadLocationScheme{
+				Location: &model.BoardPayloadLocationScheme{
 					ProjectKeyOrID: "KP",
 					Type:           "project",
 				},
 			},
-			mockFile:           "./mocks/get-board.json",
+			mockFile:           "../mocks/get-board.json",
 			wantHTTPCodeReturn: http.StatusOK,
 			wantHTTPMethod:     http.MethodPost,
 			endpoint:           "/rest/agile/1.0/board",
@@ -237,18 +238,18 @@ func TestBoardService_Create(t *testing.T) {
 
 		{
 			name: "CreateBoardWhenTheResponseStatusCodeIsIncorrect",
-			payload: &BoardPayloadScheme{
+			payload: &model.BoardPayloadScheme{
 				Name:     "DUMMY Board Name",
 				Type:     "scrum", //scrum or kanban
 				FilterID: 10016,
 
 				// Omit the Location if you want to the board to yourself (location)
-				Location: &BoardPayloadLocationScheme{
+				Location: &model.BoardPayloadLocationScheme{
 					ProjectKeyOrID: "KP",
 					Type:           "project",
 				},
 			},
-			mockFile:           "./mocks/get-board.json",
+			mockFile:           "../mocks/get-board.json",
 			wantHTTPCodeReturn: http.StatusBadGateway,
 			wantHTTPMethod:     http.MethodPost,
 			endpoint:           "/rest/agile/1.0/board",
@@ -258,18 +259,18 @@ func TestBoardService_Create(t *testing.T) {
 
 		{
 			name: "CreateBoardWhenTheResponseBodyIsEmpty",
-			payload: &BoardPayloadScheme{
+			payload: &model.BoardPayloadScheme{
 				Name:     "DUMMY Board Name",
 				Type:     "scrum", //scrum or kanban
 				FilterID: 10016,
 
 				// Omit the Location if you want to the board to yourself (location)
-				Location: &BoardPayloadLocationScheme{
+				Location: &model.BoardPayloadLocationScheme{
 					ProjectKeyOrID: "KP",
 					Type:           "project",
 				},
 			},
-			mockFile:           "./mocks/empty-json.json",
+			mockFile:           "../mocks/empty-json.json",
 			wantHTTPCodeReturn: http.StatusOK,
 			wantHTTPMethod:     http.MethodPost,
 			endpoint:           "/rest/agile/1.0/board",
@@ -343,7 +344,7 @@ func TestBoardService_Gets(t *testing.T) {
 
 	testCases := []struct {
 		name                string
-		opts                *GetBoardsOptions
+		opts                *model.GetBoardsOptions
 		startAt, maxResults int
 		mockFile            string
 		wantHTTPMethod      string
@@ -354,7 +355,7 @@ func TestBoardService_Gets(t *testing.T) {
 	}{
 		{
 			name: "GetBoardsTheParametersAreCorrect",
-			opts: &GetBoardsOptions{
+			opts: &model.GetBoardsOptions{
 				BoardType:               "scrum",
 				BoardName:               "board-name",
 				ProjectKeyOrID:          "CID",
@@ -368,7 +369,7 @@ func TestBoardService_Gets(t *testing.T) {
 			},
 			startAt:            0,
 			maxResults:         50,
-			mockFile:           "./mocks/get-boards-by-filter-id.json",
+			mockFile:           "../mocks/get-boards-by-filter-id.json",
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/board?accountIdLocation=account-id-sample&expand=permissions&filterId=111234&includePrivate=true&maxResults=50&name=board-name&negateLocationFiltering=true&orderBy=name&projectKeyOrId=CID&projectLocation=2345&startAt=0&type=scrum",
 			context:            context.Background(),
@@ -378,7 +379,7 @@ func TestBoardService_Gets(t *testing.T) {
 
 		{
 			name: "GetBoardByFilterWhenTheRequestMethodIsIncorrect",
-			opts: &GetBoardsOptions{
+			opts: &model.GetBoardsOptions{
 				BoardType:               "scrum",
 				BoardName:               "board-name",
 				ProjectKeyOrID:          "CID",
@@ -392,7 +393,7 @@ func TestBoardService_Gets(t *testing.T) {
 			},
 			startAt:            0,
 			maxResults:         50,
-			mockFile:           "./mocks/get-board.json",
+			mockFile:           "../mocks/get-board.json",
 			wantHTTPCodeReturn: http.StatusOK,
 			wantHTTPMethod:     http.MethodHead,
 			endpoint:           "/rest/agile/1.0/board?accountIdLocation=account-id-sample&expand=permissions&filterId=111234&includePrivate=true&maxResults=50&name=board-name&negateLocationFiltering=true&orderBy=name&projectKeyOrId=CID&projectLocation=2345&startAt=0&type=scrum",
@@ -402,7 +403,7 @@ func TestBoardService_Gets(t *testing.T) {
 
 		{
 			name: "GetBoardByFilterWhenTheContextIsNil",
-			opts: &GetBoardsOptions{
+			opts: &model.GetBoardsOptions{
 				BoardType:               "scrum",
 				BoardName:               "board-name",
 				ProjectKeyOrID:          "CID",
@@ -416,7 +417,7 @@ func TestBoardService_Gets(t *testing.T) {
 			},
 			startAt:            0,
 			maxResults:         50,
-			mockFile:           "./mocks/get-board.json",
+			mockFile:           "../mocks/get-board.json",
 			wantHTTPCodeReturn: http.StatusOK,
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/board?accountIdLocation=account-id-sample&expand=permissions&filterId=111234&includePrivate=true&maxResults=50&name=board-name&negateLocationFiltering=true&orderBy=name&projectKeyOrId=CID&projectLocation=2345&startAt=0&type=scrum",
@@ -426,7 +427,7 @@ func TestBoardService_Gets(t *testing.T) {
 
 		{
 			name: "GetBoardByFilterWhenTheResponseStatusCodeIsIncorrect",
-			opts: &GetBoardsOptions{
+			opts: &model.GetBoardsOptions{
 				BoardType:               "scrum",
 				BoardName:               "board-name",
 				ProjectKeyOrID:          "CID",
@@ -440,7 +441,7 @@ func TestBoardService_Gets(t *testing.T) {
 			},
 			startAt:            0,
 			maxResults:         50,
-			mockFile:           "./mocks/get-board.json",
+			mockFile:           "../mocks/get-board.json",
 			wantHTTPCodeReturn: http.StatusBadGateway,
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/board?accountIdLocation=account-id-sample&expand=permissions&filterId=111234&includePrivate=true&maxResults=50&name=board-name&negateLocationFiltering=true&orderBy=name&projectKeyOrId=CID&projectLocation=2345&startAt=0&type=scrum",
@@ -450,7 +451,7 @@ func TestBoardService_Gets(t *testing.T) {
 
 		{
 			name: "GetBoardByFilterWhenTheResponseBodyIsEmpty",
-			opts: &GetBoardsOptions{
+			opts: &model.GetBoardsOptions{
 				BoardType:               "scrum",
 				BoardName:               "board-name",
 				ProjectKeyOrID:          "CID",
@@ -464,7 +465,7 @@ func TestBoardService_Gets(t *testing.T) {
 			},
 			startAt:            0,
 			maxResults:         50,
-			mockFile:           "./mocks/empty-json.json",
+			mockFile:           "../mocks/empty-json.json",
 			wantHTTPCodeReturn: http.StatusOK,
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/board?accountIdLocation=account-id-sample&expand=permissions&filterId=111234&includePrivate=true&maxResults=50&name=board-name&negateLocationFiltering=true&orderBy=name&projectKeyOrId=CID&projectLocation=2345&startAt=0&type=scrum",
@@ -559,7 +560,7 @@ func TestBoardService_Filter(t *testing.T) {
 			filterID:           100,
 			startAt:            0,
 			maxResults:         50,
-			mockFile:           "./mocks/get-boards-by-filter-id.json",
+			mockFile:           "../mocks/get-boards-by-filter-id.json",
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/board/filter/100?maxResults=50&startAt=0",
 			context:            context.Background(),
@@ -572,7 +573,7 @@ func TestBoardService_Filter(t *testing.T) {
 			filterID:           0,
 			startAt:            0,
 			maxResults:         50,
-			mockFile:           "./mocks/get-board.json",
+			mockFile:           "../mocks/get-board.json",
 			wantHTTPCodeReturn: http.StatusOK,
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/board/filter/100?maxResults=50&startAt=0",
@@ -585,7 +586,7 @@ func TestBoardService_Filter(t *testing.T) {
 			filterID:           100,
 			startAt:            0,
 			maxResults:         50,
-			mockFile:           "./mocks/get-board.json",
+			mockFile:           "../mocks/get-board.json",
 			wantHTTPCodeReturn: http.StatusOK,
 			wantHTTPMethod:     http.MethodHead,
 			endpoint:           "/rest/agile/1.0/board/filter/100?maxResults=50&startAt=0",
@@ -598,7 +599,7 @@ func TestBoardService_Filter(t *testing.T) {
 			filterID:           100,
 			startAt:            0,
 			maxResults:         50,
-			mockFile:           "./mocks/get-board.json",
+			mockFile:           "../mocks/get-board.json",
 			wantHTTPCodeReturn: http.StatusOK,
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/board/filter/100?maxResults=50&startAt=0",
@@ -611,7 +612,7 @@ func TestBoardService_Filter(t *testing.T) {
 			filterID:           100,
 			startAt:            0,
 			maxResults:         50,
-			mockFile:           "./mocks/get-board.json",
+			mockFile:           "../mocks/get-board.json",
 			wantHTTPCodeReturn: http.StatusBadGateway,
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/board/filter/100?maxResults=50&startAt=0",
@@ -624,7 +625,7 @@ func TestBoardService_Filter(t *testing.T) {
 			filterID:           100,
 			startAt:            0,
 			maxResults:         50,
-			mockFile:           "./mocks/empty-json.json",
+			mockFile:           "../mocks/empty-json.json",
 			wantHTTPCodeReturn: http.StatusOK,
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/board/filter/100?maxResults=50&startAt=0",
@@ -707,7 +708,7 @@ func TestBoardService_Backlog(t *testing.T) {
 	testCases := []struct {
 		name                         string
 		boardID, startAt, maxResults int
-		opts                         *IssueOptionScheme
+		opts                         *model.IssueOptionScheme
 		mockFile                     string
 		wantHTTPMethod               string
 		endpoint                     string
@@ -720,13 +721,13 @@ func TestBoardService_Backlog(t *testing.T) {
 			boardID:    100,
 			startAt:    0,
 			maxResults: 50,
-			opts: &IssueOptionScheme{
+			opts: &model.IssueOptionScheme{
 				JQL:           "project = KP",
 				ValidateQuery: true,
 				Fields:        []string{"status", "issuetype", "summary"},
 				Expand:        []string{"changelog", "metadata"},
 			},
-			mockFile:           "./mocks/get-board-backlog.json",
+			mockFile:           "../mocks/get-board-backlog.json",
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/board/100/backlog?expand=changelog%2Cmetadata&fields=status%2Cissuetype%2Csummary&jql=project+%3D+KP&maxResults=50&startAt=0&validateQuery=true",
 			context:            context.Background(),
@@ -739,13 +740,13 @@ func TestBoardService_Backlog(t *testing.T) {
 			boardID:    100,
 			startAt:    0,
 			maxResults: 50,
-			opts: &IssueOptionScheme{
+			opts: &model.IssueOptionScheme{
 				JQL:           "project = KP",
 				ValidateQuery: true,
 				Fields:        []string{"status", "issuetype", "summary"},
 				Expand:        []string{"changelog", "metadata"},
 			},
-			mockFile:           "./mocks/empty-json.json",
+			mockFile:           "../mocks/empty-json.json",
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/board/100/backlog?expand=changelog%2Cmetadata&fields=status%2Cissuetype%2Csummary&jql=project+%3D+KP&maxResults=50&startAt=0&validateQuery=true",
 			context:            context.Background(),
@@ -758,13 +759,13 @@ func TestBoardService_Backlog(t *testing.T) {
 			boardID:    100,
 			startAt:    0,
 			maxResults: 50,
-			opts: &IssueOptionScheme{
+			opts: &model.IssueOptionScheme{
 				JQL:           "project = KP",
 				ValidateQuery: false,
 				Fields:        []string{"status", "issuetype", "summary"},
 				Expand:        []string{"changelog", "metadata"},
 			},
-			mockFile:           "./mocks/get-board-backlog.json",
+			mockFile:           "../mocks/get-board-backlog.json",
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/board/100/backlog?expand=changelog%2Cmetadata&fields=status%2Cissuetype%2Csummary&jql=project+%3D+KP&maxResults=50&startAt=0&validateQuery=false",
 			context:            context.Background(),
@@ -777,13 +778,13 @@ func TestBoardService_Backlog(t *testing.T) {
 			boardID:    0,
 			startAt:    0,
 			maxResults: 50,
-			opts: &IssueOptionScheme{
+			opts: &model.IssueOptionScheme{
 				JQL:           "project = KP",
 				ValidateQuery: true,
 				Fields:        []string{"status", "issuetype", "summary"},
 				Expand:        []string{"changelog"},
 			},
-			mockFile:           "./mocks/get-board-backlog.json",
+			mockFile:           "../mocks/get-board-backlog.json",
 			wantHTTPCodeReturn: http.StatusOK,
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/board/100/backlog?expand=changelog%2Cmetadata&fields=status%2Cissuetype%2Csummary&jql=project+%3D+KP&maxResults=50&startAt=0&validateQuery=false",
@@ -796,8 +797,8 @@ func TestBoardService_Backlog(t *testing.T) {
 			boardID:    100,
 			startAt:    0,
 			maxResults: 50,
-			mockFile:   "./mocks/get-board-backlog.json",
-			opts: &IssueOptionScheme{
+			mockFile:   "../mocks/get-board-backlog.json",
+			opts: &model.IssueOptionScheme{
 				JQL:           "project = KP",
 				ValidateQuery: true,
 				Fields:        []string{"status", "issuetype", "summary"},
@@ -815,8 +816,8 @@ func TestBoardService_Backlog(t *testing.T) {
 			boardID:    100,
 			startAt:    0,
 			maxResults: 50,
-			mockFile:   "./mocks/get-board-backlog.json",
-			opts: &IssueOptionScheme{
+			mockFile:   "../mocks/get-board-backlog.json",
+			opts: &model.IssueOptionScheme{
 				JQL:           "project = KP",
 				ValidateQuery: true,
 				Fields:        []string{"status", "issuetype", "summary"},
@@ -834,13 +835,13 @@ func TestBoardService_Backlog(t *testing.T) {
 			boardID:    100,
 			startAt:    0,
 			maxResults: 50,
-			opts: &IssueOptionScheme{
+			opts: &model.IssueOptionScheme{
 				JQL:           "project = KP",
 				ValidateQuery: true,
 				Fields:        []string{"status", "issuetype", "summary"},
 				Expand:        []string{"changelog", "metadata"},
 			},
-			mockFile:           "./mocks/get-board-backlog.json",
+			mockFile:           "../mocks/get-board-backlog.json",
 			wantHTTPCodeReturn: http.StatusBadGateway,
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/board/100/backlog?expand=changelog%2Cmetadata&fields=status%2Cissuetype%2Csummary&jql=project+%3D+KP&maxResults=50&startAt=0",
@@ -853,13 +854,13 @@ func TestBoardService_Backlog(t *testing.T) {
 			boardID:    100,
 			startAt:    0,
 			maxResults: 50,
-			opts: &IssueOptionScheme{
+			opts: &model.IssueOptionScheme{
 				JQL:           "project = KP",
 				ValidateQuery: true,
 				Fields:        []string{"status", "issuetype", "summary"},
 				Expand:        []string{"changelog", "metadata"},
 			},
-			mockFile:           "./mocks/empty-json.json",
+			mockFile:           "../mocks/empty-json.json",
 			wantHTTPCodeReturn: http.StatusOK,
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/board/100/backlog?expand=changelog%2Cmetadata&fields=status%2Cissuetype%2Csummary&jql=project+%3D+KP&maxResults=50&startAt=0",
@@ -952,7 +953,7 @@ func TestBoardService_Configuration(t *testing.T) {
 		{
 			name:               "GetBoardConfigurationWhenTheParametersAreCorrect",
 			boardID:            1,
-			mockFile:           "./mocks/get-board-config.json",
+			mockFile:           "../mocks/get-board-config.json",
 			wantHTTPCodeReturn: http.StatusOK,
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/board/1/configuration",
@@ -963,7 +964,7 @@ func TestBoardService_Configuration(t *testing.T) {
 		{
 			name:               "GetBoardConfigurationWhenTheBoardIsNotSet",
 			boardID:            0,
-			mockFile:           "./mocks/get-board-config.json",
+			mockFile:           "../mocks/get-board-config.json",
 			wantHTTPCodeReturn: http.StatusOK,
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/board/1/configuration",
@@ -974,7 +975,7 @@ func TestBoardService_Configuration(t *testing.T) {
 		{
 			name:               "GetBoardConfigurationWhenTheRequestMethodIsIncorrect",
 			boardID:            1,
-			mockFile:           "./mocks/get-board-config.json",
+			mockFile:           "../mocks/get-board-config.json",
 			wantHTTPCodeReturn: http.StatusOK,
 			wantHTTPMethod:     http.MethodPost,
 			endpoint:           "/rest/agile/1.0/board/1/configuration",
@@ -985,7 +986,7 @@ func TestBoardService_Configuration(t *testing.T) {
 		{
 			name:               "GetBoardConfigurationWhenTheContextIsNil",
 			boardID:            1,
-			mockFile:           "./mocks/get-board-config.json",
+			mockFile:           "../mocks/get-board-config.json",
 			wantHTTPCodeReturn: http.StatusOK,
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/board/1/configuration",
@@ -996,7 +997,7 @@ func TestBoardService_Configuration(t *testing.T) {
 		{
 			name:               "GetBoardConfigurationWhenTheResponseStatusCodeIsIncorrect",
 			boardID:            1,
-			mockFile:           "./mocks/get-board-config.json",
+			mockFile:           "../mocks/get-board-config.json",
 			wantHTTPCodeReturn: http.StatusBadGateway,
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/board/1/configuration",
@@ -1007,7 +1008,7 @@ func TestBoardService_Configuration(t *testing.T) {
 		{
 			name:               "GetBoardConfigurationWhenTheResponseBodyIsEmpty",
 			boardID:            1,
-			mockFile:           "./mocks/empty-json.json",
+			mockFile:           "../mocks/empty-json.json",
 			wantHTTPCodeReturn: http.StatusOK,
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/board/1/configuration",
@@ -1095,7 +1096,7 @@ func TestBoardService_Epics(t *testing.T) {
 			boardID:            100,
 			startAt:            0,
 			maxResults:         50,
-			mockFile:           "./mocks/get-board-epics.json",
+			mockFile:           "../mocks/get-board-epics.json",
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/board/100/epic?done=false&maxResults=50&startAt=0",
 			context:            context.Background(),
@@ -1109,7 +1110,7 @@ func TestBoardService_Epics(t *testing.T) {
 			startAt:            0,
 			maxResults:         50,
 			done:               true,
-			mockFile:           "./mocks/get-board-epics.json",
+			mockFile:           "../mocks/get-board-epics.json",
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/board/100/epic?done=true&maxResults=50&startAt=0",
 			context:            context.Background(),
@@ -1122,7 +1123,7 @@ func TestBoardService_Epics(t *testing.T) {
 			boardID:            0,
 			startAt:            0,
 			maxResults:         50,
-			mockFile:           "./mocks/get-board-epics.json",
+			mockFile:           "../mocks/get-board-epics.json",
 			wantHTTPCodeReturn: http.StatusOK,
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/board/100/epic?done=false&maxResults=50&startAt=0",
@@ -1135,7 +1136,7 @@ func TestBoardService_Epics(t *testing.T) {
 			boardID:            100,
 			startAt:            0,
 			maxResults:         50,
-			mockFile:           "./mocks/get-board-epics.json",
+			mockFile:           "../mocks/get-board-epics.json",
 			wantHTTPCodeReturn: http.StatusOK,
 			wantHTTPMethod:     http.MethodHead,
 			endpoint:           "/rest/agile/1.0/board/100/epic?done=false&maxResults=50&startAt=0",
@@ -1148,7 +1149,7 @@ func TestBoardService_Epics(t *testing.T) {
 			boardID:            100,
 			startAt:            0,
 			maxResults:         50,
-			mockFile:           "./mocks/get-board-epics.json",
+			mockFile:           "../mocks/get-board-epics.json",
 			wantHTTPCodeReturn: http.StatusOK,
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/board/100/epic?done=false&maxResults=50&startAt=0",
@@ -1161,7 +1162,7 @@ func TestBoardService_Epics(t *testing.T) {
 			boardID:            100,
 			startAt:            0,
 			maxResults:         50,
-			mockFile:           "./mocks/get-board-epics.json",
+			mockFile:           "../mocks/get-board-epics.json",
 			wantHTTPCodeReturn: http.StatusBadGateway,
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/board/100/epic?done=false&maxResults=50&startAt=0",
@@ -1174,7 +1175,7 @@ func TestBoardService_Epics(t *testing.T) {
 			boardID:            100,
 			startAt:            0,
 			maxResults:         50,
-			mockFile:           "./mocks/empty-json.json",
+			mockFile:           "../mocks/empty-json.json",
 			wantHTTPCodeReturn: http.StatusOK,
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/board/100/epic?done=false&maxResults=50&startAt=0",
@@ -1257,7 +1258,7 @@ func TestBoardService_IssuesWithoutEpic(t *testing.T) {
 	testCases := []struct {
 		name                         string
 		boardID, startAt, maxResults int
-		opts                         *IssueOptionScheme
+		opts                         *model.IssueOptionScheme
 		mockFile                     string
 		wantHTTPMethod               string
 		endpoint                     string
@@ -1270,13 +1271,13 @@ func TestBoardService_IssuesWithoutEpic(t *testing.T) {
 			boardID:    100,
 			startAt:    0,
 			maxResults: 50,
-			opts: &IssueOptionScheme{
+			opts: &model.IssueOptionScheme{
 				JQL:           "project = KP",
 				ValidateQuery: true,
 				Fields:        []string{"status", "issuetype", "summary"},
 				Expand:        []string{"changelog", "metadata"},
 			},
-			mockFile:           "./mocks/get-board-issue-without-epic.json",
+			mockFile:           "../mocks/get-board-issue-without-epic.json",
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/board/100/epic/none/issue?expand=changelog%2Cmetadata&fields=status%2Cissuetype%2Csummary&jql=project+%3D+KP&maxResults=50&startAt=0",
 			context:            context.Background(),
@@ -1289,13 +1290,13 @@ func TestBoardService_IssuesWithoutEpic(t *testing.T) {
 			boardID:    100,
 			startAt:    0,
 			maxResults: 50,
-			opts: &IssueOptionScheme{
+			opts: &model.IssueOptionScheme{
 				JQL:           "project = KP",
 				ValidateQuery: true,
 				Fields:        []string{"status", "issuetype", "summary"},
 				Expand:        []string{"changelog", "metadata"},
 			},
-			mockFile:           "./mocks/empty-json.json",
+			mockFile:           "../mocks/empty-json.json",
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/board/100/epic/none/issue?expand=changelog%2Cmetadata&fields=status%2Cissuetype%2Csummary&jql=project+%3D+KP&maxResults=50&startAt=0",
 			context:            context.Background(),
@@ -1308,13 +1309,13 @@ func TestBoardService_IssuesWithoutEpic(t *testing.T) {
 			boardID:    100,
 			startAt:    0,
 			maxResults: 50,
-			opts: &IssueOptionScheme{
+			opts: &model.IssueOptionScheme{
 				JQL:           "project = KP",
 				ValidateQuery: false,
 				Fields:        []string{"status", "issuetype", "summary"},
 				Expand:        []string{"changelog", "metadata"},
 			},
-			mockFile: "./mocks/get-board-issue-without-epic.json",
+			mockFile: "../mocks/get-board-issue-without-epic.json",
 
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/board/100/epic/none/issue?expand=changelog%2Cmetadata&fields=status%2Cissuetype%2Csummary&jql=project+%3D+KP&maxResults=50&startAt=0&validateQuery+=false",
@@ -1328,13 +1329,13 @@ func TestBoardService_IssuesWithoutEpic(t *testing.T) {
 			boardID:    0,
 			startAt:    0,
 			maxResults: 50,
-			opts: &IssueOptionScheme{
+			opts: &model.IssueOptionScheme{
 				JQL:           "project = KP",
 				ValidateQuery: true,
 				Fields:        []string{"status", "issuetype", "summary"},
 				Expand:        []string{"changelog"},
 			},
-			mockFile: "./mocks/get-board-issue-without-epic.json",
+			mockFile: "../mocks/get-board-issue-without-epic.json",
 
 			wantHTTPCodeReturn: http.StatusOK,
 			wantHTTPMethod:     http.MethodGet,
@@ -1348,9 +1349,9 @@ func TestBoardService_IssuesWithoutEpic(t *testing.T) {
 			boardID:    100,
 			startAt:    0,
 			maxResults: 50,
-			mockFile:   "./mocks/get-board-issue-without-epic.json",
+			mockFile:   "../mocks/get-board-issue-without-epic.json",
 
-			opts: &IssueOptionScheme{
+			opts: &model.IssueOptionScheme{
 				JQL:           "project = KP",
 				ValidateQuery: true,
 				Fields:        []string{"status", "issuetype", "summary"},
@@ -1368,9 +1369,9 @@ func TestBoardService_IssuesWithoutEpic(t *testing.T) {
 			boardID:    100,
 			startAt:    0,
 			maxResults: 50,
-			mockFile:   "./mocks/get-board-issue-without-epic.json",
+			mockFile:   "../mocks/get-board-issue-without-epic.json",
 
-			opts: &IssueOptionScheme{
+			opts: &model.IssueOptionScheme{
 				JQL:           "project = KP",
 				ValidateQuery: true,
 				Fields:        []string{"status", "issuetype", "summary"},
@@ -1388,13 +1389,13 @@ func TestBoardService_IssuesWithoutEpic(t *testing.T) {
 			boardID:    100,
 			startAt:    0,
 			maxResults: 50,
-			opts: &IssueOptionScheme{
+			opts: &model.IssueOptionScheme{
 				JQL:           "project = KP",
 				ValidateQuery: true,
 				Fields:        []string{"status", "issuetype", "summary"},
 				Expand:        []string{"changelog", "metadata"},
 			},
-			mockFile: "./mocks/get-board-issue-without-epic.json",
+			mockFile: "../mocks/get-board-issue-without-epic.json",
 
 			wantHTTPCodeReturn: http.StatusBadGateway,
 			wantHTTPMethod:     http.MethodGet,
@@ -1408,13 +1409,13 @@ func TestBoardService_IssuesWithoutEpic(t *testing.T) {
 			boardID:    100,
 			startAt:    0,
 			maxResults: 50,
-			opts: &IssueOptionScheme{
+			opts: &model.IssueOptionScheme{
 				JQL:           "project = KP",
 				ValidateQuery: true,
 				Fields:        []string{"status", "issuetype", "summary"},
 				Expand:        []string{"changelog", "metadata"},
 			},
-			mockFile: "./mocks/get-board-issue-without-epic.json",
+			mockFile: "../mocks/get-board-issue-without-epic.json",
 
 			wantHTTPCodeReturn: http.StatusOK,
 			wantHTTPMethod:     http.MethodGet,
@@ -1498,7 +1499,7 @@ func TestBoardService_IssuesByEpic(t *testing.T) {
 	testCases := []struct {
 		name                                 string
 		boardID, epicID, startAt, maxResults int
-		opts                                 *IssueOptionScheme
+		opts                                 *model.IssueOptionScheme
 		mockFile                             string
 		wantHTTPMethod                       string
 		endpoint                             string
@@ -1512,13 +1513,13 @@ func TestBoardService_IssuesByEpic(t *testing.T) {
 			epicID:     22,
 			startAt:    0,
 			maxResults: 50,
-			opts: &IssueOptionScheme{
+			opts: &model.IssueOptionScheme{
 				JQL:           "project = KP",
 				ValidateQuery: true,
 				Fields:        []string{"status", "issuetype", "summary"},
 				Expand:        []string{"changelog", "metadata"},
 			},
-			mockFile:           "./mocks/get-board-issue-by-epic.json",
+			mockFile:           "../mocks/get-board-issue-by-epic.json",
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/board/100/epic/22/issue?expand=changelog%2Cmetadata&fields=status%2Cissuetype%2Csummary&jql=project+%3D+KP&maxResults=50&startAt=0",
 			context:            context.Background(),
@@ -1532,13 +1533,13 @@ func TestBoardService_IssuesByEpic(t *testing.T) {
 			epicID:     0,
 			startAt:    0,
 			maxResults: 50,
-			opts: &IssueOptionScheme{
+			opts: &model.IssueOptionScheme{
 				JQL:           "project = KP",
 				ValidateQuery: true,
 				Fields:        []string{"status", "issuetype", "summary"},
 				Expand:        []string{"changelog", "metadata"},
 			},
-			mockFile:           "./mocks/get-board-issue-by-epic.json",
+			mockFile:           "../mocks/get-board-issue-by-epic.json",
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/board/100/epic/22/issue?expand=changelog%2Cmetadata&fields=status%2Cissuetype%2Csummary&jql=project+%3D+KP&maxResults=50&startAt=0",
 			context:            context.Background(),
@@ -1552,13 +1553,13 @@ func TestBoardService_IssuesByEpic(t *testing.T) {
 			epicID:     22,
 			startAt:    0,
 			maxResults: 50,
-			opts: &IssueOptionScheme{
+			opts: &model.IssueOptionScheme{
 				JQL:           "project = KP",
 				ValidateQuery: false,
 				Fields:        []string{"status", "issuetype", "summary"},
 				Expand:        []string{"changelog", "metadata"},
 			},
-			mockFile:           "./mocks/get-board-issue-by-epic.json",
+			mockFile:           "../mocks/get-board-issue-by-epic.json",
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/board/100/epic/22/issue?expand=changelog%2Cmetadata&fields=status%2Cissuetype%2Csummary&jql=project+%3D+KP&maxResults=50&startAt=0&validateQuery+=false",
 			context:            context.Background(),
@@ -1572,13 +1573,13 @@ func TestBoardService_IssuesByEpic(t *testing.T) {
 			epicID:     22,
 			startAt:    0,
 			maxResults: 50,
-			opts: &IssueOptionScheme{
+			opts: &model.IssueOptionScheme{
 				JQL:           "project = KP",
 				ValidateQuery: true,
 				Fields:        []string{"status", "issuetype", "summary"},
 				Expand:        []string{"changelog"},
 			},
-			mockFile:           "./mocks/get-board-issue-by-epic.json",
+			mockFile:           "../mocks/get-board-issue-by-epic.json",
 			wantHTTPCodeReturn: http.StatusOK,
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/board/100/epic/22/issue?expand=changelog%2Cmetadata&fields=status%2Cissuetype%2Csummary&jql=project+%3D+KP&maxResults=50&startAt=0",
@@ -1592,8 +1593,8 @@ func TestBoardService_IssuesByEpic(t *testing.T) {
 			epicID:     22,
 			startAt:    0,
 			maxResults: 50,
-			mockFile:   "./mocks/get-board-issue-by-epic.json",
-			opts: &IssueOptionScheme{
+			mockFile:   "../mocks/get-board-issue-by-epic.json",
+			opts: &model.IssueOptionScheme{
 				JQL:           "project = KP",
 				ValidateQuery: true,
 				Fields:        []string{"status", "issuetype", "summary"},
@@ -1613,8 +1614,8 @@ func TestBoardService_IssuesByEpic(t *testing.T) {
 
 			startAt:    0,
 			maxResults: 50,
-			mockFile:   "./mocks/get-board-issue-by-epic.json",
-			opts: &IssueOptionScheme{
+			mockFile:   "../mocks/get-board-issue-by-epic.json",
+			opts: &model.IssueOptionScheme{
 				JQL:           "project = KP",
 				ValidateQuery: true,
 				Fields:        []string{"status", "issuetype", "summary"},
@@ -1634,13 +1635,13 @@ func TestBoardService_IssuesByEpic(t *testing.T) {
 
 			startAt:    0,
 			maxResults: 50,
-			opts: &IssueOptionScheme{
+			opts: &model.IssueOptionScheme{
 				JQL:           "project = KP",
 				ValidateQuery: true,
 				Fields:        []string{"status", "issuetype", "summary"},
 				Expand:        []string{"changelog", "metadata"},
 			},
-			mockFile:           "./mocks/get-board-issue-by-epic.json",
+			mockFile:           "../mocks/get-board-issue-by-epic.json",
 			wantHTTPCodeReturn: http.StatusBadGateway,
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/board/100/epic/22/issue?expand=changelog%2Cmetadata&fields=status%2Cissuetype%2Csummary&jql=project+%3D+KP&maxResults=50&startAt=0",
@@ -1654,13 +1655,13 @@ func TestBoardService_IssuesByEpic(t *testing.T) {
 			epicID:     22,
 			startAt:    0,
 			maxResults: 50,
-			opts: &IssueOptionScheme{
+			opts: &model.IssueOptionScheme{
 				JQL:           "project = KP",
 				ValidateQuery: true,
 				Fields:        []string{"status", "issuetype", "summary"},
 				Expand:        []string{"changelog", "metadata"},
 			},
-			mockFile:           "./mocks/empty-json.json",
+			mockFile:           "../mocks/empty-json.json",
 			wantHTTPCodeReturn: http.StatusOK,
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/board/100/epic/22/issue?expand=changelog%2Cmetadata&fields=status%2Cissuetype%2Csummary&jql=project+%3D+KP&maxResults=50&startAt=0",
@@ -1743,7 +1744,7 @@ func TestBoardService_Issues(t *testing.T) {
 	testCases := []struct {
 		name                         string
 		boardID, startAt, maxResults int
-		opts                         *IssueOptionScheme
+		opts                         *model.IssueOptionScheme
 		mockFile                     string
 		wantHTTPMethod               string
 		endpoint                     string
@@ -1756,13 +1757,13 @@ func TestBoardService_Issues(t *testing.T) {
 			boardID:    100,
 			startAt:    0,
 			maxResults: 50,
-			opts: &IssueOptionScheme{
+			opts: &model.IssueOptionScheme{
 				JQL:           "project = KP",
 				ValidateQuery: true,
 				Fields:        []string{"status", "issuetype", "summary"},
 				Expand:        []string{"changelog", "metadata"},
 			},
-			mockFile:           "./mocks/get-board-issues.json",
+			mockFile:           "../mocks/get-board-issues.json",
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/board/100/issue?expand=changelog%2Cmetadata&fields=status%2Cissuetype%2Csummary&jql=project+%3D+KP&maxResults=50&startAt=0",
 			context:            context.Background(),
@@ -1775,13 +1776,13 @@ func TestBoardService_Issues(t *testing.T) {
 			boardID:    100,
 			startAt:    0,
 			maxResults: 50,
-			opts: &IssueOptionScheme{
+			opts: &model.IssueOptionScheme{
 				JQL:           "project = KP",
 				ValidateQuery: false,
 				Fields:        []string{"status", "issuetype", "summary"},
 				Expand:        []string{"changelog", "metadata"},
 			},
-			mockFile:           "./mocks/get-board-issues.json",
+			mockFile:           "../mocks/get-board-issues.json",
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/board/100/issue?expand=changelog%2Cmetadata&fields=status%2Cissuetype%2Csummary&jql=project+%3D+KP&maxResults=50&startAt=0&validateQuery+=false",
 			context:            context.Background(),
@@ -1794,13 +1795,13 @@ func TestBoardService_Issues(t *testing.T) {
 			boardID:    0,
 			startAt:    0,
 			maxResults: 50,
-			opts: &IssueOptionScheme{
+			opts: &model.IssueOptionScheme{
 				JQL:           "project = KP",
 				ValidateQuery: true,
 				Fields:        []string{"status", "issuetype", "summary"},
 				Expand:        []string{"changelog"},
 			},
-			mockFile:           "./mocks/get-board-issues.json",
+			mockFile:           "../mocks/get-board-issues.json",
 			wantHTTPCodeReturn: http.StatusOK,
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/board/100/issue?expand=changelog%2Cmetadata&fields=status%2Cissuetype%2Csummary&jql=project+%3D+KP&maxResults=50&startAt=0",
@@ -1813,8 +1814,8 @@ func TestBoardService_Issues(t *testing.T) {
 			boardID:    100,
 			startAt:    0,
 			maxResults: 50,
-			mockFile:   "./mocks/get-board-issues.json",
-			opts: &IssueOptionScheme{
+			mockFile:   "../mocks/get-board-issues.json",
+			opts: &model.IssueOptionScheme{
 				JQL:           "project = KP",
 				ValidateQuery: true,
 				Fields:        []string{"status", "issuetype", "summary"},
@@ -1832,8 +1833,8 @@ func TestBoardService_Issues(t *testing.T) {
 			boardID:    100,
 			startAt:    0,
 			maxResults: 50,
-			mockFile:   "./mocks/get-board-issues.json",
-			opts: &IssueOptionScheme{
+			mockFile:   "../mocks/get-board-issues.json",
+			opts: &model.IssueOptionScheme{
 				JQL:           "project = KP",
 				ValidateQuery: true,
 				Fields:        []string{"status", "issuetype", "summary"},
@@ -1851,13 +1852,13 @@ func TestBoardService_Issues(t *testing.T) {
 			boardID:    100,
 			startAt:    0,
 			maxResults: 50,
-			opts: &IssueOptionScheme{
+			opts: &model.IssueOptionScheme{
 				JQL:           "project = KP",
 				ValidateQuery: true,
 				Fields:        []string{"status", "issuetype", "summary"},
 				Expand:        []string{"changelog", "metadata"},
 			},
-			mockFile:           "./mocks/get-board-issues.json",
+			mockFile:           "../mocks/get-board-issues.json",
 			wantHTTPCodeReturn: http.StatusBadGateway,
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/board/100/issue?expand=changelog%2Cmetadata&fields=status%2Cissuetype%2Csummary&jql=project+%3D+KP&maxResults=50&startAt=0",
@@ -1870,13 +1871,13 @@ func TestBoardService_Issues(t *testing.T) {
 			boardID:    100,
 			startAt:    0,
 			maxResults: 50,
-			opts: &IssueOptionScheme{
+			opts: &model.IssueOptionScheme{
 				JQL:           "project = KP",
 				ValidateQuery: true,
 				Fields:        []string{"status", "issuetype", "summary"},
 				Expand:        []string{"changelog", "metadata"},
 			},
-			mockFile:           "./mocks/empty-json.json",
+			mockFile:           "../mocks/empty-json.json",
 			wantHTTPCodeReturn: http.StatusOK,
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/board/100/issue?expand=changelog%2Cmetadata&fields=status%2Cissuetype%2Csummary&jql=project+%3D+KP&maxResults=50&startAt=0",
@@ -1971,7 +1972,7 @@ func TestBoardService_Projects(t *testing.T) {
 			boardID:            100,
 			startAt:            0,
 			maxResults:         50,
-			mockFile:           "./mocks/get-board-projects.json",
+			mockFile:           "../mocks/get-board-projects.json",
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/board/100/project?maxResults=50&startAt=0",
 			context:            context.Background(),
@@ -1984,7 +1985,7 @@ func TestBoardService_Projects(t *testing.T) {
 			boardID:            0,
 			startAt:            0,
 			maxResults:         50,
-			mockFile:           "./mocks/get-board-projects.json",
+			mockFile:           "../mocks/get-board-projects.json",
 			wantHTTPCodeReturn: http.StatusOK,
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/board/100/project?maxResults=50&startAt=0",
@@ -1997,7 +1998,7 @@ func TestBoardService_Projects(t *testing.T) {
 			boardID:            100,
 			startAt:            0,
 			maxResults:         50,
-			mockFile:           "./mocks/get-board-projects.json",
+			mockFile:           "../mocks/get-board-projects.json",
 			wantHTTPCodeReturn: http.StatusOK,
 			wantHTTPMethod:     http.MethodHead,
 			endpoint:           "/rest/agile/1.0/board/100/project?maxResults=50&startAt=0",
@@ -2010,7 +2011,7 @@ func TestBoardService_Projects(t *testing.T) {
 			boardID:            100,
 			startAt:            0,
 			maxResults:         50,
-			mockFile:           "./mocks/get-board-projects.json",
+			mockFile:           "../mocks/get-board-projects.json",
 			wantHTTPCodeReturn: http.StatusOK,
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/board/100/project?maxResults=50&startAt=0",
@@ -2023,7 +2024,7 @@ func TestBoardService_Projects(t *testing.T) {
 			boardID:            100,
 			startAt:            0,
 			maxResults:         50,
-			mockFile:           "./mocks/get-board-projects.json",
+			mockFile:           "../mocks/get-board-projects.json",
 			wantHTTPCodeReturn: http.StatusBadGateway,
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/board/100/project?maxResults=50&startAt=0",
@@ -2036,7 +2037,7 @@ func TestBoardService_Projects(t *testing.T) {
 			boardID:            100,
 			startAt:            0,
 			maxResults:         50,
-			mockFile:           "./mocks/empty-json.json",
+			mockFile:           "../mocks/empty-json.json",
 			wantHTTPCodeReturn: http.StatusOK,
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/board/100/project?maxResults=50&startAt=0",
@@ -2119,7 +2120,7 @@ func TestBoardService_IssuesBySprint(t *testing.T) {
 	testCases := []struct {
 		name                                  string
 		sprintID, epicID, startAt, maxResults int
-		opts                                  *IssueOptionScheme
+		opts                                  *model.IssueOptionScheme
 		mockFile                              string
 		wantHTTPMethod                        string
 		endpoint                              string
@@ -2133,13 +2134,13 @@ func TestBoardService_IssuesBySprint(t *testing.T) {
 			epicID:     22,
 			startAt:    0,
 			maxResults: 50,
-			opts: &IssueOptionScheme{
+			opts: &model.IssueOptionScheme{
 				JQL:           "project = KP",
 				ValidateQuery: true,
 				Fields:        []string{"status", "issuetype", "summary"},
 				Expand:        []string{"changelog", "metadata"},
 			},
-			mockFile:           "./mocks/get-board-issue-by-epic.json",
+			mockFile:           "../mocks/get-board-issue-by-epic.json",
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/board/100/sprint/22/issue?expand=changelog%2Cmetadata&fields=status%2Cissuetype%2Csummary&jql=project+%3D+KP&maxResults=50&startAt=0",
 			context:            context.Background(),
@@ -2153,13 +2154,13 @@ func TestBoardService_IssuesBySprint(t *testing.T) {
 			epicID:     0,
 			startAt:    0,
 			maxResults: 50,
-			opts: &IssueOptionScheme{
+			opts: &model.IssueOptionScheme{
 				JQL:           "project = KP",
 				ValidateQuery: true,
 				Fields:        []string{"status", "issuetype", "summary"},
 				Expand:        []string{"changelog", "metadata"},
 			},
-			mockFile:           "./mocks/get-board-issue-by-epic.json",
+			mockFile:           "../mocks/get-board-issue-by-epic.json",
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/board/100/sprint/22/issue?expand=changelog%2Cmetadata&fields=status%2Cissuetype%2Csummary&jql=project+%3D+KP&maxResults=50&startAt=0",
 			context:            context.Background(),
@@ -2173,13 +2174,13 @@ func TestBoardService_IssuesBySprint(t *testing.T) {
 			epicID:     100,
 			startAt:    0,
 			maxResults: 50,
-			opts: &IssueOptionScheme{
+			opts: &model.IssueOptionScheme{
 				JQL:           "project = KP",
 				ValidateQuery: true,
 				Fields:        []string{"status", "issuetype", "summary"},
 				Expand:        []string{"changelog", "metadata"},
 			},
-			mockFile:           "./mocks/get-board-issue-by-epic.json",
+			mockFile:           "../mocks/get-board-issue-by-epic.json",
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/board/100/sprint/22/issue?expand=changelog%2Cmetadata&fields=status%2Cissuetype%2Csummary&jql=project+%3D+KP&maxResults=50&startAt=0",
 			context:            context.Background(),
@@ -2193,13 +2194,13 @@ func TestBoardService_IssuesBySprint(t *testing.T) {
 			epicID:     22,
 			startAt:    0,
 			maxResults: 50,
-			opts: &IssueOptionScheme{
+			opts: &model.IssueOptionScheme{
 				JQL:           "project = KP",
 				ValidateQuery: false,
 				Fields:        []string{"status", "issuetype", "summary"},
 				Expand:        []string{"changelog", "metadata"},
 			},
-			mockFile:           "./mocks/get-board-issue-by-epic.json",
+			mockFile:           "../mocks/get-board-issue-by-epic.json",
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/board/100/sprint/22/issue?expand=changelog%2Cmetadata&fields=status%2Cissuetype%2Csummary&jql=project+%3D+KP&maxResults=50&startAt=0&validateQuery+=false",
 			context:            context.Background(),
@@ -2213,13 +2214,13 @@ func TestBoardService_IssuesBySprint(t *testing.T) {
 			epicID:     22,
 			startAt:    0,
 			maxResults: 50,
-			opts: &IssueOptionScheme{
+			opts: &model.IssueOptionScheme{
 				JQL:           "project = KP",
 				ValidateQuery: true,
 				Fields:        []string{"status", "issuetype", "summary"},
 				Expand:        []string{"changelog"},
 			},
-			mockFile:           "./mocks/get-board-issue-by-epic.json",
+			mockFile:           "../mocks/get-board-issue-by-epic.json",
 			wantHTTPCodeReturn: http.StatusOK,
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/board/100/sprint/22/issue?expand=changelog%2Cmetadata&fields=status%2Cissuetype%2Csummary&jql=project+%3D+KP&maxResults=50&startAt=0",
@@ -2233,8 +2234,8 @@ func TestBoardService_IssuesBySprint(t *testing.T) {
 			epicID:     22,
 			startAt:    0,
 			maxResults: 50,
-			mockFile:   "./mocks/get-board-issue-by-epic.json",
-			opts: &IssueOptionScheme{
+			mockFile:   "../mocks/get-board-issue-by-epic.json",
+			opts: &model.IssueOptionScheme{
 				JQL:           "project = KP",
 				ValidateQuery: true,
 				Fields:        []string{"status", "issuetype", "summary"},
@@ -2254,8 +2255,8 @@ func TestBoardService_IssuesBySprint(t *testing.T) {
 
 			startAt:    0,
 			maxResults: 50,
-			mockFile:   "./mocks/get-board-issue-by-epic.json",
-			opts: &IssueOptionScheme{
+			mockFile:   "../mocks/get-board-issue-by-epic.json",
+			opts: &model.IssueOptionScheme{
 				JQL:           "project = KP",
 				ValidateQuery: true,
 				Fields:        []string{"status", "issuetype", "summary"},
@@ -2275,13 +2276,13 @@ func TestBoardService_IssuesBySprint(t *testing.T) {
 
 			startAt:    0,
 			maxResults: 50,
-			opts: &IssueOptionScheme{
+			opts: &model.IssueOptionScheme{
 				JQL:           "project = KP",
 				ValidateQuery: true,
 				Fields:        []string{"status", "issuetype", "summary"},
 				Expand:        []string{"changelog", "metadata"},
 			},
-			mockFile:           "./mocks/get-board-issue-by-epic.json",
+			mockFile:           "../mocks/get-board-issue-by-epic.json",
 			wantHTTPCodeReturn: http.StatusBadGateway,
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/board/100/sprint/22/issue?expand=changelog%2Cmetadata&fields=status%2Cissuetype%2Csummary&jql=project+%3D+KP&maxResults=50&startAt=0",
@@ -2295,13 +2296,13 @@ func TestBoardService_IssuesBySprint(t *testing.T) {
 			epicID:     22,
 			startAt:    0,
 			maxResults: 50,
-			opts: &IssueOptionScheme{
+			opts: &model.IssueOptionScheme{
 				JQL:           "project = KP",
 				ValidateQuery: true,
 				Fields:        []string{"status", "issuetype", "summary"},
 				Expand:        []string{"changelog", "metadata"},
 			},
-			mockFile:           "./mocks/empty-json.json",
+			mockFile:           "../mocks/empty-json.json",
 			wantHTTPCodeReturn: http.StatusOK,
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/board/100/sprint/22/issue?expand=changelog%2Cmetadata&fields=status%2Cissuetype%2Csummary&jql=project+%3D+KP&maxResults=50&startAt=0",
@@ -2398,7 +2399,7 @@ func TestBoardService_Versions(t *testing.T) {
 			released:           true,
 			startAt:            0,
 			maxResults:         50,
-			mockFile:           "./mocks/get-board-versions.json",
+			mockFile:           "../mocks/get-board-versions.json",
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/board/100/version?maxResults=50&released=true&startAt=0",
 			context:            context.Background(),
@@ -2412,7 +2413,7 @@ func TestBoardService_Versions(t *testing.T) {
 			released:           true,
 			startAt:            0,
 			maxResults:         50,
-			mockFile:           "./mocks/get-board-versions.json",
+			mockFile:           "../mocks/get-board-versions.json",
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/board/100/version?maxResults=50&released=true&startAt=0",
 			context:            context.Background(),
@@ -2426,7 +2427,7 @@ func TestBoardService_Versions(t *testing.T) {
 			released:           false,
 			startAt:            0,
 			maxResults:         50,
-			mockFile:           "./mocks/get-board-versions.json",
+			mockFile:           "../mocks/get-board-versions.json",
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/board/100/version?maxResults=50&released=false&startAt=0",
 			context:            context.Background(),
@@ -2440,7 +2441,7 @@ func TestBoardService_Versions(t *testing.T) {
 			released:           true,
 			startAt:            0,
 			maxResults:         50,
-			mockFile:           "./mocks/get-board-versions.json",
+			mockFile:           "../mocks/get-board-versions.json",
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/board/100/version?maxResults=50&released=true&startAt=0",
 			context:            nil,
@@ -2454,7 +2455,7 @@ func TestBoardService_Versions(t *testing.T) {
 			released:           true,
 			startAt:            0,
 			maxResults:         50,
-			mockFile:           "./mocks/get-board-versions.json",
+			mockFile:           "../mocks/get-board-versions.json",
 			wantHTTPMethod:     http.MethodPut,
 			endpoint:           "/rest/agile/1.0/board/100/version?maxResults=50&released=true&startAt=0",
 			context:            context.Background(),
@@ -2468,7 +2469,7 @@ func TestBoardService_Versions(t *testing.T) {
 			released:           true,
 			startAt:            0,
 			maxResults:         50,
-			mockFile:           "./mocks/get-board-versions.json",
+			mockFile:           "../mocks/get-board-versions.json",
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/board/100/version?maxResults=50&released=true&startAt=0",
 			context:            context.Background(),
@@ -2482,7 +2483,7 @@ func TestBoardService_Versions(t *testing.T) {
 			released:           true,
 			startAt:            0,
 			maxResults:         50,
-			mockFile:           "./mocks/empty-json.json",
+			mockFile:           "../mocks/empty-json.json",
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/board/100/version?maxResults=50&released=true&startAt=0",
 			context:            context.Background(),
@@ -2565,7 +2566,7 @@ func TestBoardService_Move(t *testing.T) {
 	testCases := []struct {
 		name               string
 		boardID            int
-		payload            *BoardMovementPayloadScheme
+		payload            *model.BoardMovementPayloadScheme
 		mockFile           string
 		wantHTTPMethod     string
 		endpoint           string
@@ -2576,7 +2577,7 @@ func TestBoardService_Move(t *testing.T) {
 		{
 			name:    "MoveBacklogIssueToBoardWhenTheParametersAreCorrect",
 			boardID: 100,
-			payload: &BoardMovementPayloadScheme{
+			payload: &model.BoardMovementPayloadScheme{
 				Issues:          []string{"KP-3"},
 				RankBeforeIssue: "",
 				RankAfterIssue:  "",
@@ -2602,7 +2603,7 @@ func TestBoardService_Move(t *testing.T) {
 		{
 			name:    "MoveBacklogIssueToBoardWhenTheBoardIDIsNotSet",
 			boardID: 0,
-			payload: &BoardMovementPayloadScheme{
+			payload: &model.BoardMovementPayloadScheme{
 				Issues:          []string{"KP-3"},
 				RankBeforeIssue: "",
 				RankAfterIssue:  "",
@@ -2617,7 +2618,7 @@ func TestBoardService_Move(t *testing.T) {
 		{
 			name:    "MoveBacklogIssueToBoardWhenTheContextIsNil",
 			boardID: 100,
-			payload: &BoardMovementPayloadScheme{
+			payload: &model.BoardMovementPayloadScheme{
 				Issues:          []string{"KP-3"},
 				RankBeforeIssue: "",
 				RankAfterIssue:  "",
@@ -2632,7 +2633,7 @@ func TestBoardService_Move(t *testing.T) {
 		{
 			name:    "MoveBacklogIssueToBoardWhenTheRequestMethodIsIncorrect",
 			boardID: 100,
-			payload: &BoardMovementPayloadScheme{
+			payload: &model.BoardMovementPayloadScheme{
 				Issues:          []string{"KP-3"},
 				RankBeforeIssue: "",
 				RankAfterIssue:  "",
@@ -2647,7 +2648,7 @@ func TestBoardService_Move(t *testing.T) {
 		{
 			name:    "MoveBacklogIssueToBoardWhenTheStatusCodeIsIncorrect",
 			boardID: 100,
-			payload: &BoardMovementPayloadScheme{
+			payload: &model.BoardMovementPayloadScheme{
 				Issues:          []string{"KP-3"},
 				RankBeforeIssue: "",
 				RankAfterIssue:  "",
@@ -2746,7 +2747,7 @@ func TestBoardService_Sprints(t *testing.T) {
 			states:             []string{"open", "closed"},
 			startAt:            0,
 			maxResults:         50,
-			mockFile:           "./mocks/get-board-sprints.json",
+			mockFile:           "../mocks/get-board-sprints.json",
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/board/100/sprint?maxResults=50&startAt=0&state=open%2Cclosed",
 			context:            context.Background(),
@@ -2760,7 +2761,7 @@ func TestBoardService_Sprints(t *testing.T) {
 			states:             []string{"open", "closed"},
 			startAt:            0,
 			maxResults:         50,
-			mockFile:           "./mocks/get-board-sprints.json",
+			mockFile:           "../mocks/get-board-sprints.json",
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/board/100/sprint?maxResults=50&startAt=0&state=open%2Cclosed",
 			context:            context.Background(),
@@ -2774,7 +2775,7 @@ func TestBoardService_Sprints(t *testing.T) {
 			states:         []string{"open", "closed"},
 			startAt:        0,
 			maxResults:     50,
-			mockFile:       "./mocks/get-board-sprints.json",
+			mockFile:       "../mocks/get-board-sprints.json",
 			wantHTTPMethod: http.MethodGet,
 			endpoint:       "/rest/agile/1.0/board/100/sprint?maxResults=50&startAt=0&state=open%2Cclosed",
 			context:        nil,
@@ -2787,7 +2788,7 @@ func TestBoardService_Sprints(t *testing.T) {
 			states:             []string{"open", "closed"},
 			startAt:            0,
 			maxResults:         50,
-			mockFile:           "./mocks/get-board-sprints.json",
+			mockFile:           "../mocks/get-board-sprints.json",
 			wantHTTPMethod:     http.MethodPost,
 			endpoint:           "/rest/agile/1.0/board/100/sprint?maxResults=50&startAt=0&state=open%2Cclosed",
 			context:            context.Background(),
@@ -2801,7 +2802,7 @@ func TestBoardService_Sprints(t *testing.T) {
 			states:             []string{"open", "closed"},
 			startAt:            0,
 			maxResults:         50,
-			mockFile:           "./mocks/get-board-sprints.json",
+			mockFile:           "../mocks/get-board-sprints.json",
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/board/100/sprint?maxResults=50&startAt=0&state=open%2Cclosed",
 			context:            context.Background(),
@@ -2815,7 +2816,7 @@ func TestBoardService_Sprints(t *testing.T) {
 			states:             []string{"open", "closed"},
 			startAt:            0,
 			maxResults:         50,
-			mockFile:           "./mocks/empty-json.json",
+			mockFile:           "../mocks/empty-json.json",
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/board/100/sprint?maxResults=50&startAt=0&state=open%2Cclosed",
 			context:            context.Background(),
diff --git a/jira/agile/epic_test.go b/jira/agile/epic_test.go
index 0e58736..3955c3f 100644
--- a/jira/agile/epic_test.go
+++ b/jira/agile/epic_test.go
@@ -3,6 +3,7 @@ package agile
 import (
 	"context"
 	"fmt"
+	model "github.com/ctreminiom/go-atlassian/pkg/infra/models/agile"
 	"github.com/stretchr/testify/assert"
 	"net/http"
 	"net/url"
@@ -24,7 +25,7 @@ func TestEpicService_Get(t *testing.T) {
 		{
 			name:               "GetEpicWhenTheParametersAreCorrect",
 			epicIDOrKey:        "KP-16",
-			mockFile:           "./mocks/get-epic.json",
+			mockFile:           "../mocks/get-epic.json",
 			wantHTTPCodeReturn: http.StatusOK,
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/epic/KP-16",
@@ -35,7 +36,7 @@ func TestEpicService_Get(t *testing.T) {
 		{
 			name:               "GetEpicWhenTheEpicKeyOrIDIsNotSet",
 			epicIDOrKey:        "",
-			mockFile:           "./mocks/get-epic.json",
+			mockFile:           "../mocks/get-epic.json",
 			wantHTTPCodeReturn: http.StatusOK,
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/epic/KP-16",
@@ -46,7 +47,7 @@ func TestEpicService_Get(t *testing.T) {
 		{
 			name:               "GetEpicWhenTheRequestMethodIsIncorrect",
 			epicIDOrKey:        "KP-16",
-			mockFile:           "./mocks/get-epic.json",
+			mockFile:           "../mocks/get-epic.json",
 			wantHTTPCodeReturn: http.StatusOK,
 			wantHTTPMethod:     http.MethodPost,
 			endpoint:           "/rest/agile/1.0/epic/KP-16",
@@ -57,7 +58,7 @@ func TestEpicService_Get(t *testing.T) {
 		{
 			name:               "GetEpicWhenTheContextIsNil",
 			epicIDOrKey:        "KP-16",
-			mockFile:           "./mocks/get-epic.json",
+			mockFile:           "../mocks/get-epic.json",
 			wantHTTPCodeReturn: http.StatusOK,
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/epic/KP-16",
@@ -68,7 +69,7 @@ func TestEpicService_Get(t *testing.T) {
 		{
 			name:               "GetEpicWhenTheResponseStatusCodeIsIncorrect",
 			epicIDOrKey:        "KP-16",
-			mockFile:           "./mocks/get-epic.json",
+			mockFile:           "../mocks/get-epic.json",
 			wantHTTPCodeReturn: http.StatusBadGateway,
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/epic/KP-16",
@@ -79,7 +80,7 @@ func TestEpicService_Get(t *testing.T) {
 		{
 			name:               "GetEpicWhenTheResponseBodyIsEmpty",
 			epicIDOrKey:        "KP-16",
-			mockFile:           "./mocks/empty-json.json",
+			mockFile:           "../mocks/empty-json.json",
 			wantHTTPCodeReturn: http.StatusOK,
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/epic/KP-16",
@@ -155,7 +156,7 @@ func TestEpicService_Issues(t *testing.T) {
 		name                string
 		epicIDOrKey         string
 		startAt, maxResults int
-		opts                *IssueOptionScheme
+		opts                *model.IssueOptionScheme
 		mockFile            string
 		wantHTTPMethod      string
 		endpoint            string
@@ -168,13 +169,13 @@ func TestEpicService_Issues(t *testing.T) {
 			epicIDOrKey: "KP-16",
 			startAt:     0,
 			maxResults:  50,
-			opts: &IssueOptionScheme{
+			opts: &model.IssueOptionScheme{
 				JQL:           "project = KP",
 				ValidateQuery: true,
 				Fields:        []string{"status", "issuetype", "summary"},
 				Expand:        []string{"changelog", "metadata"},
 			},
-			mockFile:           "./mocks/get-epic-issues.json",
+			mockFile:           "../mocks/get-epic-issues.json",
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/epic/KP-16/issue?expand=changelog%2Cmetadata&fields=status%2Cissuetype%2Csummary&jql=project+%3D+KP&maxResults=50&startAt=0&validateQuery=true",
 			context:            context.Background(),
@@ -187,13 +188,13 @@ func TestEpicService_Issues(t *testing.T) {
 			epicIDOrKey: "",
 			startAt:     0,
 			maxResults:  50,
-			opts: &IssueOptionScheme{
+			opts: &model.IssueOptionScheme{
 				JQL:           "project = KP",
 				ValidateQuery: true,
 				Fields:        []string{"status", "issuetype", "summary"},
 				Expand:        []string{"changelog", "metadata"},
 			},
-			mockFile:           "./mocks/get-epic-issues.json",
+			mockFile:           "../mocks/get-epic-issues.json",
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/epic/KP-16/issue?expand=changelog%2Cmetadata&fields=status%2Cissuetype%2Csummary&jql=project+%3D+KP&maxResults=50&startAt=0&validateQuery=true",
 			context:            context.Background(),
@@ -206,13 +207,13 @@ func TestEpicService_Issues(t *testing.T) {
 			epicIDOrKey: "KP-16",
 			startAt:     0,
 			maxResults:  50,
-			opts: &IssueOptionScheme{
+			opts: &model.IssueOptionScheme{
 				JQL:           "project = KP",
 				ValidateQuery: true,
 				Fields:        []string{"status", "issuetype", "summary"},
 				Expand:        []string{"changelog", "metadata"},
 			},
-			mockFile:           "./mocks/empty-json.json",
+			mockFile:           "../mocks/empty-json.json",
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/epic/KP-16/issue?expand=changelog%2Cmetadata&fields=status%2Cissuetype%2Csummary&jql=project+%3D+KP&maxResults=50&startAt=0&validateQuery=true",
 			context:            context.Background(),
@@ -225,13 +226,13 @@ func TestEpicService_Issues(t *testing.T) {
 			epicIDOrKey: "KP-16",
 			startAt:     0,
 			maxResults:  50,
-			opts: &IssueOptionScheme{
+			opts: &model.IssueOptionScheme{
 				JQL:           "project = KP",
 				ValidateQuery: false,
 				Fields:        []string{"status", "issuetype", "summary"},
 				Expand:        []string{"changelog", "metadata"},
 			},
-			mockFile: "./mocks/get-epic-issues.json",
+			mockFile: "../mocks/get-epic-issues.json",
 
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/epic/KP-16/issue?expand=changelog%2Cmetadata&fields=status%2Cissuetype%2Csummary&jql=project+%3D+KP&maxResults=50&startAt=0&validateQuery=false",
@@ -246,13 +247,13 @@ func TestEpicService_Issues(t *testing.T) {
 
 			startAt:    0,
 			maxResults: 50,
-			opts: &IssueOptionScheme{
+			opts: &model.IssueOptionScheme{
 				JQL:           "project = KP",
 				ValidateQuery: true,
 				Fields:        []string{"status", "issuetype", "summary"},
 				Expand:        []string{"changelog"},
 			},
-			mockFile: "./mocks/get-epic-issues.json",
+			mockFile: "../mocks/get-epic-issues.json",
 
 			wantHTTPCodeReturn: http.StatusOK,
 			wantHTTPMethod:     http.MethodGet,
@@ -267,9 +268,9 @@ func TestEpicService_Issues(t *testing.T) {
 
 			startAt:    0,
 			maxResults: 50,
-			mockFile:   "./mocks/get-epic-issues.json",
+			mockFile:   "../mocks/get-epic-issues.json",
 
-			opts: &IssueOptionScheme{
+			opts: &model.IssueOptionScheme{
 				JQL:           "project = KP",
 				ValidateQuery: true,
 				Fields:        []string{"status", "issuetype", "summary"},
@@ -288,9 +289,9 @@ func TestEpicService_Issues(t *testing.T) {
 
 			startAt:    0,
 			maxResults: 50,
-			mockFile:   "./mocks/get-epic-issues.json",
+			mockFile:   "../mocks/get-epic-issues.json",
 
-			opts: &IssueOptionScheme{
+			opts: &model.IssueOptionScheme{
 				JQL:           "project = KP",
 				ValidateQuery: true,
 				Fields:        []string{"status", "issuetype", "summary"},
@@ -309,13 +310,13 @@ func TestEpicService_Issues(t *testing.T) {
 
 			startAt:    0,
 			maxResults: 50,
-			opts: &IssueOptionScheme{
+			opts: &model.IssueOptionScheme{
 				JQL:           "project = KP",
 				ValidateQuery: true,
 				Fields:        []string{"status", "issuetype", "summary"},
 				Expand:        []string{"changelog", "metadata"},
 			},
-			mockFile: "./mocks/get-epic-issues.json",
+			mockFile: "../mocks/get-epic-issues.json",
 
 			wantHTTPCodeReturn: http.StatusBadGateway,
 			wantHTTPMethod:     http.MethodGet,
diff --git a/jira/agile/sprint_test.go b/jira/agile/sprint_test.go
index 24190fc..9b95763 100644
--- a/jira/agile/sprint_test.go
+++ b/jira/agile/sprint_test.go
@@ -3,6 +3,7 @@ package agile
 import (
 	"context"
 	"fmt"
+	model "github.com/ctreminiom/go-atlassian/pkg/infra/models/agile"
 	"github.com/stretchr/testify/assert"
 	"net/http"
 	"net/url"
@@ -24,7 +25,7 @@ func TestSprintService_Get(t *testing.T) {
 		{
 			name:               "GetSprintWhenTheParametersAreCorrect",
 			sprintID:           1,
-			mockFile:           "./mocks/get-sprint-by-id.json",
+			mockFile:           "../mocks/get-sprint-by-id.json",
 			wantHTTPCodeReturn: http.StatusOK,
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/sprint/1",
@@ -35,7 +36,7 @@ func TestSprintService_Get(t *testing.T) {
 		{
 			name:               "GetSprintWhenTheSprintIDIsZero",
 			sprintID:           0,
-			mockFile:           "./mocks/get-sprint-by-id.json",
+			mockFile:           "../mocks/get-sprint-by-id.json",
 			wantHTTPCodeReturn: http.StatusOK,
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/sprint/1",
@@ -46,7 +47,7 @@ func TestSprintService_Get(t *testing.T) {
 		{
 			name:               "GetSprintWhenTheRequestMethodIsIncorrect",
 			sprintID:           1,
-			mockFile:           "./mocks/get-sprint-by-id.json",
+			mockFile:           "../mocks/get-sprint-by-id.json",
 			wantHTTPCodeReturn: http.StatusOK,
 			wantHTTPMethod:     http.MethodDelete,
 			endpoint:           "/rest/agile/1.0/sprint/1",
@@ -57,7 +58,7 @@ func TestSprintService_Get(t *testing.T) {
 		{
 			name:               "GetSprintWhenTheStatusCodeIsIncorrect",
 			sprintID:           1,
-			mockFile:           "./mocks/get-sprint-by-id.json",
+			mockFile:           "../mocks/get-sprint-by-id.json",
 			wantHTTPCodeReturn: http.StatusBadRequest,
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/sprint/1",
@@ -68,7 +69,7 @@ func TestSprintService_Get(t *testing.T) {
 		{
 			name:               "GetSprintWhenTheContextIsNil",
 			sprintID:           1,
-			mockFile:           "./mocks/get-sprint-by-id.json",
+			mockFile:           "../mocks/get-sprint-by-id.json",
 			wantHTTPCodeReturn: http.StatusOK,
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/sprint/1",
@@ -79,7 +80,7 @@ func TestSprintService_Get(t *testing.T) {
 		{
 			name:               "GetSprintWhenTheResponseBodyIsEmpty",
 			sprintID:           1,
-			mockFile:           "./mocks/empty-json.json",
+			mockFile:           "../mocks/empty-json.json",
 			wantHTTPCodeReturn: http.StatusOK,
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/sprint/1",
@@ -154,7 +155,7 @@ func TestSprintService_Create(t *testing.T) {
 
 	testCases := []struct {
 		name               string
-		payload            *SprintPayloadScheme
+		payload            *model.SprintPayloadScheme
 		mockFile           string
 		wantHTTPMethod     string
 		endpoint           string
@@ -164,14 +165,14 @@ func TestSprintService_Create(t *testing.T) {
 	}{
 		{
 			name: "CreateSprintWhenTheParametersAreCorrect",
-			payload: &SprintPayloadScheme{
+			payload: &model.SprintPayloadScheme{
 				Name:          "Sprint XX",
 				StartDate:     "2015-04-11T15:22:00.000+10:00",
 				EndDate:       "2015-04-20T01:22:00.000+10:00",
 				OriginBoardID: 4,
 				Goal:          "Sprint XX goal",
 			},
-			mockFile:           "./mocks/get-sprint-by-id.json",
+			mockFile:           "../mocks/get-sprint-by-id.json",
 			wantHTTPCodeReturn: http.StatusOK,
 			wantHTTPMethod:     http.MethodPost,
 			endpoint:           "/rest/agile/1.0/sprint",
@@ -182,7 +183,7 @@ func TestSprintService_Create(t *testing.T) {
 		{
 			name:               "CreateSprintWhenThePayloadIsNotProvided",
 			payload:            nil,
-			mockFile:           "./mocks/get-sprint-by-id.json",
+			mockFile:           "../mocks/get-sprint-by-id.json",
 			wantHTTPCodeReturn: http.StatusOK,
 			wantHTTPMethod:     http.MethodPost,
 			endpoint:           "/rest/agile/1.0/sprint",
@@ -192,14 +193,14 @@ func TestSprintService_Create(t *testing.T) {
 
 		{
 			name: "CreateSprintWhenTheRequestMethodIsIncorrect",
-			payload: &SprintPayloadScheme{
+			payload: &model.SprintPayloadScheme{
 				Name:          "Sprint XX",
 				StartDate:     "2015-04-11T15:22:00.000+10:00",
 				EndDate:       "2015-04-20T01:22:00.000+10:00",
 				OriginBoardID: 4,
 				Goal:          "Sprint XX goal",
 			},
-			mockFile:           "./mocks/get-sprint-by-id.json",
+			mockFile:           "../mocks/get-sprint-by-id.json",
 			wantHTTPCodeReturn: http.StatusOK,
 			wantHTTPMethod:     http.MethodDelete,
 			endpoint:           "/rest/agile/1.0/sprint",
@@ -209,14 +210,14 @@ func TestSprintService_Create(t *testing.T) {
 
 		{
 			name: "CreateSprintWhenTheStatusCodeIsIncorrect",
-			payload: &SprintPayloadScheme{
+			payload: &model.SprintPayloadScheme{
 				Name:          "Sprint XX",
 				StartDate:     "2015-04-11T15:22:00.000+10:00",
 				EndDate:       "2015-04-20T01:22:00.000+10:00",
 				OriginBoardID: 4,
 				Goal:          "Sprint XX goal",
 			},
-			mockFile:           "./mocks/get-sprint-by-id.json",
+			mockFile:           "../mocks/get-sprint-by-id.json",
 			wantHTTPCodeReturn: http.StatusBadRequest,
 			wantHTTPMethod:     http.MethodPost,
 			endpoint:           "/rest/agile/1.0/sprint",
@@ -226,14 +227,14 @@ func TestSprintService_Create(t *testing.T) {
 
 		{
 			name: "CreateSprintWhenTheContextIsNil",
-			payload: &SprintPayloadScheme{
+			payload: &model.SprintPayloadScheme{
 				Name:          "Sprint XX",
 				StartDate:     "2015-04-11T15:22:00.000+10:00",
 				EndDate:       "2015-04-20T01:22:00.000+10:00",
 				OriginBoardID: 4,
 				Goal:          "Sprint XX goal",
 			},
-			mockFile:           "./mocks/get-sprint-by-id.json",
+			mockFile:           "../mocks/get-sprint-by-id.json",
 			wantHTTPCodeReturn: http.StatusOK,
 			wantHTTPMethod:     http.MethodPost,
 			endpoint:           "/rest/agile/1.0/sprint",
@@ -243,14 +244,14 @@ func TestSprintService_Create(t *testing.T) {
 
 		{
 			name: "CreateSprintWhenTheResponseBodyIsEmpty",
-			payload: &SprintPayloadScheme{
+			payload: &model.SprintPayloadScheme{
 				Name:          "Sprint XX",
 				StartDate:     "2015-04-11T15:22:00.000+10:00",
 				EndDate:       "2015-04-20T01:22:00.000+10:00",
 				OriginBoardID: 4,
 				Goal:          "Sprint XX goal",
 			},
-			mockFile:           "./mocks/empty-json.json",
+			mockFile:           "../mocks/empty-json.json",
 			wantHTTPCodeReturn: http.StatusOK,
 			wantHTTPMethod:     http.MethodPost,
 			endpoint:           "/rest/agile/1.0/sprint",
@@ -326,7 +327,7 @@ func TestSprintService_Update(t *testing.T) {
 	testCases := []struct {
 		name               string
 		sprintID           int
-		payload            *SprintPayloadScheme
+		payload            *model.SprintPayloadScheme
 		mockFile           string
 		wantHTTPMethod     string
 		endpoint           string
@@ -337,14 +338,14 @@ func TestSprintService_Update(t *testing.T) {
 		{
 			name:     "UpdateSprintWhenTheParametersAreCorrect",
 			sprintID: 1,
-			payload: &SprintPayloadScheme{
+			payload: &model.SprintPayloadScheme{
 				Name:          "Sprint XX",
 				StartDate:     "2015-04-11T15:22:00.000+10:00",
 				EndDate:       "2015-04-20T01:22:00.000+10:00",
 				OriginBoardID: 4,
 				Goal:          "Sprint XX goal",
 			},
-			mockFile:           "./mocks/get-sprint-by-id.json",
+			mockFile:           "../mocks/get-sprint-by-id.json",
 			wantHTTPCodeReturn: http.StatusOK,
 			wantHTTPMethod:     http.MethodPut,
 			endpoint:           "/rest/agile/1.0/sprint/1",
@@ -355,14 +356,14 @@ func TestSprintService_Update(t *testing.T) {
 		{
 			name:     "UpdateSprintWhenTheSprintIDIsZero",
 			sprintID: 0,
-			payload: &SprintPayloadScheme{
+			payload: &model.SprintPayloadScheme{
 				Name:          "Sprint XX",
 				StartDate:     "2015-04-11T15:22:00.000+10:00",
 				EndDate:       "2015-04-20T01:22:00.000+10:00",
 				OriginBoardID: 4,
 				Goal:          "Sprint XX goal",
 			},
-			mockFile:           "./mocks/get-sprint-by-id.json",
+			mockFile:           "../mocks/get-sprint-by-id.json",
 			wantHTTPCodeReturn: http.StatusOK,
 			wantHTTPMethod:     http.MethodPut,
 			endpoint:           "/rest/agile/1.0/sprint/1",
@@ -374,7 +375,7 @@ func TestSprintService_Update(t *testing.T) {
 			name:               "UpdateSprintWhenThePayloadIsNotProvided",
 			sprintID:           1,
 			payload:            nil,
-			mockFile:           "./mocks/get-sprint-by-id.json",
+			mockFile:           "../mocks/get-sprint-by-id.json",
 			wantHTTPCodeReturn: http.StatusOK,
 			wantHTTPMethod:     http.MethodPut,
 			endpoint:           "/rest/agile/1.0/sprint/1",
@@ -385,14 +386,14 @@ func TestSprintService_Update(t *testing.T) {
 		{
 			name:     "UpdateSprintWhenTheRequestMethodIsIncorrect",
 			sprintID: 1,
-			payload: &SprintPayloadScheme{
+			payload: &model.SprintPayloadScheme{
 				Name:          "Sprint XX",
 				StartDate:     "2015-04-11T15:22:00.000+10:00",
 				EndDate:       "2015-04-20T01:22:00.000+10:00",
 				OriginBoardID: 4,
 				Goal:          "Sprint XX goal",
 			},
-			mockFile:           "./mocks/get-sprint-by-id.json",
+			mockFile:           "../mocks/get-sprint-by-id.json",
 			wantHTTPCodeReturn: http.StatusOK,
 			wantHTTPMethod:     http.MethodDelete,
 			endpoint:           "/rest/agile/1.0/sprint/1",
@@ -403,14 +404,14 @@ func TestSprintService_Update(t *testing.T) {
 		{
 			name:     "UpdateSprintWhenTheStatusCodeIsIncorrect",
 			sprintID: 1,
-			payload: &SprintPayloadScheme{
+			payload: &model.SprintPayloadScheme{
 				Name:          "Sprint XX",
 				StartDate:     "2015-04-11T15:22:00.000+10:00",
 				EndDate:       "2015-04-20T01:22:00.000+10:00",
 				OriginBoardID: 4,
 				Goal:          "Sprint XX goal",
 			},
-			mockFile:           "./mocks/get-sprint-by-id.json",
+			mockFile:           "../mocks/get-sprint-by-id.json",
 			wantHTTPCodeReturn: http.StatusBadRequest,
 			wantHTTPMethod:     http.MethodPut,
 			endpoint:           "/rest/agile/1.0/sprint/1",
@@ -421,14 +422,14 @@ func TestSprintService_Update(t *testing.T) {
 		{
 			name:     "UpdateSprintWhenTheContextIsNil",
 			sprintID: 1,
-			payload: &SprintPayloadScheme{
+			payload: &model.SprintPayloadScheme{
 				Name:          "Sprint XX",
 				StartDate:     "2015-04-11T15:22:00.000+10:00",
 				EndDate:       "2015-04-20T01:22:00.000+10:00",
 				OriginBoardID: 4,
 				Goal:          "Sprint XX goal",
 			},
-			mockFile:           "./mocks/get-sprint-by-id.json",
+			mockFile:           "../mocks/get-sprint-by-id.json",
 			wantHTTPCodeReturn: http.StatusOK,
 			wantHTTPMethod:     http.MethodPut,
 			endpoint:           "/rest/agile/1.0/sprint/1",
@@ -439,14 +440,14 @@ func TestSprintService_Update(t *testing.T) {
 		{
 			name:     "UpdateSprintWhenTheResponseBodyIsEmpty",
 			sprintID: 1,
-			payload: &SprintPayloadScheme{
+			payload: &model.SprintPayloadScheme{
 				Name:          "Sprint XX",
 				StartDate:     "2015-04-11T15:22:00.000+10:00",
 				EndDate:       "2015-04-20T01:22:00.000+10:00",
 				OriginBoardID: 4,
 				Goal:          "Sprint XX goal",
 			},
-			mockFile:           "./mocks/empty-json.json",
+			mockFile:           "../mocks/empty-json.json",
 			wantHTTPCodeReturn: http.StatusOK,
 			wantHTTPMethod:     http.MethodPut,
 			endpoint:           "/rest/agile/1.0/sprint/1",
@@ -522,7 +523,7 @@ func TestSprintService_Path(t *testing.T) {
 	testCases := []struct {
 		name               string
 		sprintID           int
-		payload            *SprintPayloadScheme
+		payload            *model.SprintPayloadScheme
 		mockFile           string
 		wantHTTPMethod     string
 		endpoint           string
@@ -533,14 +534,14 @@ func TestSprintService_Path(t *testing.T) {
 		{
 			name:     "PathSprintWhenTheParametersAreCorrect",
 			sprintID: 1,
-			payload: &SprintPayloadScheme{
+			payload: &model.SprintPayloadScheme{
 				Name:          "Sprint XX",
 				StartDate:     "2015-04-11T15:22:00.000+10:00",
 				EndDate:       "2015-04-20T01:22:00.000+10:00",
 				OriginBoardID: 4,
 				Goal:          "Sprint XX goal",
 			},
-			mockFile:           "./mocks/get-sprint-by-id.json",
+			mockFile:           "../mocks/get-sprint-by-id.json",
 			wantHTTPCodeReturn: http.StatusOK,
 			wantHTTPMethod:     http.MethodPost,
 			endpoint:           "/rest/agile/1.0/sprint/1",
@@ -551,14 +552,14 @@ func TestSprintService_Path(t *testing.T) {
 		{
 			name:     "PathSprintWhenTheSprintIDIsZero",
 			sprintID: 0,
-			payload: &SprintPayloadScheme{
+			payload: &model.SprintPayloadScheme{
 				Name:          "Sprint XX",
 				StartDate:     "2015-04-11T15:22:00.000+10:00",
 				EndDate:       "2015-04-20T01:22:00.000+10:00",
 				OriginBoardID: 4,
 				Goal:          "Sprint XX goal",
 			},
-			mockFile:           "./mocks/get-sprint-by-id.json",
+			mockFile:           "../mocks/get-sprint-by-id.json",
 			wantHTTPCodeReturn: http.StatusOK,
 			wantHTTPMethod:     http.MethodPost,
 			endpoint:           "/rest/agile/1.0/sprint/1",
@@ -570,7 +571,7 @@ func TestSprintService_Path(t *testing.T) {
 			name:               "PathSprintWhenThePayloadIsNotProvided",
 			sprintID:           1,
 			payload:            nil,
-			mockFile:           "./mocks/get-sprint-by-id.json",
+			mockFile:           "../mocks/get-sprint-by-id.json",
 			wantHTTPCodeReturn: http.StatusOK,
 			wantHTTPMethod:     http.MethodPost,
 			endpoint:           "/rest/agile/1.0/sprint/1",
@@ -581,14 +582,14 @@ func TestSprintService_Path(t *testing.T) {
 		{
 			name:     "PathSprintWhenTheRequestMethodIsIncorrect",
 			sprintID: 1,
-			payload: &SprintPayloadScheme{
+			payload: &model.SprintPayloadScheme{
 				Name:          "Sprint XX",
 				StartDate:     "2015-04-11T15:22:00.000+10:00",
 				EndDate:       "2015-04-20T01:22:00.000+10:00",
 				OriginBoardID: 4,
 				Goal:          "Sprint XX goal",
 			},
-			mockFile:           "./mocks/get-sprint-by-id.json",
+			mockFile:           "../mocks/get-sprint-by-id.json",
 			wantHTTPCodeReturn: http.StatusOK,
 			wantHTTPMethod:     http.MethodDelete,
 			endpoint:           "/rest/agile/1.0/sprint/1",
@@ -599,14 +600,14 @@ func TestSprintService_Path(t *testing.T) {
 		{
 			name:     "PathSprintWhenTheStatusCodeIsIncorrect",
 			sprintID: 1,
-			payload: &SprintPayloadScheme{
+			payload: &model.SprintPayloadScheme{
 				Name:          "Sprint XX",
 				StartDate:     "2015-04-11T15:22:00.000+10:00",
 				EndDate:       "2015-04-20T01:22:00.000+10:00",
 				OriginBoardID: 4,
 				Goal:          "Sprint XX goal",
 			},
-			mockFile:           "./mocks/get-sprint-by-id.json",
+			mockFile:           "../mocks/get-sprint-by-id.json",
 			wantHTTPCodeReturn: http.StatusBadRequest,
 			wantHTTPMethod:     http.MethodPost,
 			endpoint:           "/rest/agile/1.0/sprint/1",
@@ -617,14 +618,14 @@ func TestSprintService_Path(t *testing.T) {
 		{
 			name:     "PathSprintWhenTheContextIsNil",
 			sprintID: 1,
-			payload: &SprintPayloadScheme{
+			payload: &model.SprintPayloadScheme{
 				Name:          "Sprint XX",
 				StartDate:     "2015-04-11T15:22:00.000+10:00",
 				EndDate:       "2015-04-20T01:22:00.000+10:00",
 				OriginBoardID: 4,
 				Goal:          "Sprint XX goal",
 			},
-			mockFile:           "./mocks/get-sprint-by-id.json",
+			mockFile:           "../mocks/get-sprint-by-id.json",
 			wantHTTPCodeReturn: http.StatusOK,
 			wantHTTPMethod:     http.MethodPost,
 			endpoint:           "/rest/agile/1.0/sprint/1",
@@ -635,14 +636,14 @@ func TestSprintService_Path(t *testing.T) {
 		{
 			name:     "PathSprintWhenTheResponseBodyIsEmpty",
 			sprintID: 1,
-			payload: &SprintPayloadScheme{
+			payload: &model.SprintPayloadScheme{
 				Name:          "Sprint XX",
 				StartDate:     "2015-04-11T15:22:00.000+10:00",
 				EndDate:       "2015-04-20T01:22:00.000+10:00",
 				OriginBoardID: 4,
 				Goal:          "Sprint XX goal",
 			},
-			mockFile:           "./mocks/empty-json.json",
+			mockFile:           "../mocks/empty-json.json",
 			wantHTTPCodeReturn: http.StatusOK,
 			wantHTTPMethod:     http.MethodPost,
 			endpoint:           "/rest/agile/1.0/sprint/1",
@@ -1090,7 +1091,7 @@ func TestSprintService_Issues(t *testing.T) {
 	testCases := []struct {
 		name                string
 		sprintID            int
-		opts                *IssueOptionScheme
+		opts                *model.IssueOptionScheme
 		startAt, maxResults int
 		mockFile            string
 		wantHTTPMethod      string
@@ -1102,7 +1103,7 @@ func TestSprintService_Issues(t *testing.T) {
 		{
 			name:     "GetSprintIssuesWhenTheParametersAreCorrect",
 			sprintID: 1,
-			opts: &IssueOptionScheme{
+			opts: &model.IssueOptionScheme{
 				JQL:           "project = DUMMY",
 				Fields:        []string{"summary", "status"},
 				Expand:        []string{"changelogs", "transitions"},
@@ -1110,7 +1111,7 @@ func TestSprintService_Issues(t *testing.T) {
 			},
 			startAt:            0,
 			maxResults:         50,
-			mockFile:           "./mocks/get-sprint-issues.json",
+			mockFile:           "../mocks/get-sprint-issues.json",
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/sprint/1/issue?expand=changelogs%2Ctransitions&fields=summary%2Cstatus&jql=project+%3D+DUMMY&maxResults=50&startAt=0&validateQuery+=false",
 			context:            context.Background(),
@@ -1121,7 +1122,7 @@ func TestSprintService_Issues(t *testing.T) {
 		{
 			name:     "GetSprintIssuesWhenTheSprintIDIsNotProvided",
 			sprintID: 0,
-			opts: &IssueOptionScheme{
+			opts: &model.IssueOptionScheme{
 				JQL:           "project = DUMMY",
 				Fields:        []string{"summary", "status"},
 				Expand:        []string{"changelogs"},
@@ -1129,7 +1130,7 @@ func TestSprintService_Issues(t *testing.T) {
 			},
 			startAt:            0,
 			maxResults:         50,
-			mockFile:           "./mocks/get-sprint-issues.json",
+			mockFile:           "../mocks/get-sprint-issues.json",
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/sprint/1/issue?expand=changelogs&fields=summary%2Cstatus&jql=project+%3D+DUMMY&maxResults=50&startAt=0&validateQuery+=false",
 			context:            context.Background(),
@@ -1140,7 +1141,7 @@ func TestSprintService_Issues(t *testing.T) {
 		{
 			name:     "GetSprintIssuesWhenTheRequestMethodIsIncorrect",
 			sprintID: 1,
-			opts: &IssueOptionScheme{
+			opts: &model.IssueOptionScheme{
 				JQL:           "project = DUMMY",
 				Fields:        []string{"summary", "status"},
 				Expand:        []string{"changelogs"},
@@ -1148,7 +1149,7 @@ func TestSprintService_Issues(t *testing.T) {
 			},
 			startAt:            0,
 			maxResults:         50,
-			mockFile:           "./mocks/get-sprint-issues.json",
+			mockFile:           "../mocks/get-sprint-issues.json",
 			wantHTTPMethod:     http.MethodHead,
 			endpoint:           "/rest/agile/1.0/sprint/1/issue?expand=changelogs&fields=summary%2Cstatus&jql=project+%3D+DUMMY&maxResults=50&startAt=0&validateQuery+=false",
 			context:            context.Background(),
@@ -1159,7 +1160,7 @@ func TestSprintService_Issues(t *testing.T) {
 		{
 			name:     "GetSprintIssuesWhenTheStatusCodeIsIncorrect",
 			sprintID: 1,
-			opts: &IssueOptionScheme{
+			opts: &model.IssueOptionScheme{
 				JQL:           "project = DUMMY",
 				Fields:        []string{"summary", "status"},
 				Expand:        []string{"changelogs"},
@@ -1167,7 +1168,7 @@ func TestSprintService_Issues(t *testing.T) {
 			},
 			startAt:            0,
 			maxResults:         50,
-			mockFile:           "./mocks/get-sprint-issues.json",
+			mockFile:           "../mocks/get-sprint-issues.json",
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/sprint/1/issue?expand=changelogs&fields=summary%2Cstatus&jql=project+%3D+DUMMY&maxResults=50&startAt=0&validateQuery+=false",
 			context:            context.Background(),
@@ -1178,7 +1179,7 @@ func TestSprintService_Issues(t *testing.T) {
 		{
 			name:     "GetSprintIssuesWhenTheContextIsNil",
 			sprintID: 1,
-			opts: &IssueOptionScheme{
+			opts: &model.IssueOptionScheme{
 				JQL:           "project = DUMMY",
 				Fields:        []string{"summary", "status"},
 				Expand:        []string{"changelogs"},
@@ -1186,7 +1187,7 @@ func TestSprintService_Issues(t *testing.T) {
 			},
 			startAt:            0,
 			maxResults:         50,
-			mockFile:           "./mocks/get-sprint-issues.json",
+			mockFile:           "../mocks/get-sprint-issues.json",
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/sprint/1/issue?expand=changelogs&fields=summary%2Cstatus&jql=project+%3D+DUMMY&maxResults=50&startAt=0&validateQuery+=false",
 			context:            nil,
@@ -1197,7 +1198,7 @@ func TestSprintService_Issues(t *testing.T) {
 		{
 			name:     "GetSprintIssuesWhenTheResponseBodyIsEmpty",
 			sprintID: 1,
-			opts: &IssueOptionScheme{
+			opts: &model.IssueOptionScheme{
 				JQL:           "project = DUMMY",
 				Fields:        []string{"summary", "status"},
 				Expand:        []string{"changelogs"},
@@ -1205,7 +1206,7 @@ func TestSprintService_Issues(t *testing.T) {
 			},
 			startAt:            0,
 			maxResults:         50,
-			mockFile:           "./mocks/empty-json.json",
+			mockFile:           "../mocks/empty-json.json",
 			wantHTTPMethod:     http.MethodGet,
 			endpoint:           "/rest/agile/1.0/sprint/1/issue?expand=changelogs&fields=summary%2Cstatus&jql=project+%3D+DUMMY&maxResults=50&startAt=0&validateQuery+=false",
 			context:            context.Background(),