Commit cdfa3e74 authored by Walmyr Lima's avatar Walmyr Lima

Refactor board related resources

To allow for the creation of board resources in the group and
project levels.
parent dc864ec8
......@@ -135,15 +135,27 @@ module QA
end
module Resource
autoload :Board, 'qa/ee/resource/board'
autoload :License, 'qa/ee/resource/license'
autoload :Epic, 'qa/ee/resource/epic'
autoload :ProjectMilestone, 'qa/ee/resource/project_milestone'
autoload :GroupLabel, 'qa/ee/resource/group_label.rb'
module BoardList
autoload :BaseBoardList, 'qa/ee/resource/board_list/base_board_list'
autoload :LabelBoardList, 'qa/ee/resource/board_list/label_board_list'
autoload :MilestoneBoardList, 'qa/ee/resource/board_list/milestone_board_list'
module Board
autoload :BaseBoard, 'qa/ee/resource/board/base_board'
autoload :GroupBoard, 'qa/ee/resource/board/group_board'
autoload :ProjectBoard, 'qa/ee/resource/board/project_board'
module BoardList
module Group
autoload :BoardList, 'qa/ee/resource/board/board_list/group/board_list'
end
module Project
autoload :BaseBoardList, 'qa/ee/resource/board/board_list/project/base_board_list'
autoload :LabelBoardList, 'qa/ee/resource/board/board_list/project/label_board_list'
autoload :MilestoneBoardList, 'qa/ee/resource/board/board_list/project/milestone_board_list'
end
end
end
module Geo
......
......@@ -3,19 +3,20 @@
module QA
module EE
module Resource
module BoardList
class LabelBoardList < BaseBoardList
attribute :label do
QA::Resource::Label.fabricate_via_api! do |l|
l.project = board.project
l.title = 'Doing'
end
module Board
class BaseBoard < QA::Resource::Base
attribute :id
attribute :name
def resource_web_url(resource)
super
rescue ResourceURLMissingError
# this particular resource does not expose a web_url property
end
def api_post_body
{
board_id: board.id,
label_id: label.id
name: name
}
end
end
......
# frozen_string_literal: true
module QA
module EE
module Resource
module Board
module BoardList
module Group
class BoardList < QA::Resource::Base
attribute :id
attribute :label_title
attribute :group do
QA::Resource::Group.fabricate_via_api!
end
attribute :board do
QA::EE::Resource::Board::GroupBoard.fabricate_via_api! do |group_board|
group_board.group = group
group_board.name = 'Upstream'
end
end
attribute :label do
QA::EE::Resource::GroupLabel.fabricate_via_api! do |group_label|
group_label.group = board.group
group_label.title = label_title
end
end
def resource_web_url(resource)
super
rescue ResourceURLMissingError
# this particular resource does not expose a web_url property
end
def api_get_path
"/groups/#{board.group.id}/boards/#{board.id}/lists/#{id}"
end
def api_post_path
"/groups/#{board.group.id}/boards/#{board.id}/lists"
end
def api_post_body
{
board_id: board.id,
label_id: label.id
}
end
end
end
end
end
end
end
end
# frozen_string_literal: true
module QA
module EE
module Resource
module Board
module BoardList
module Project
class BaseBoardList < QA::Resource::Base
attribute :id
attribute :project do
QA::Resource::Project.fabricate_via_api! do |project|
project.name = 'project-with-board-list'
end
end
attribute :board do
QA::EE::Resource::Board::ProjectBoard.fabricate_via_api! do |project_board|
project_board.project = project
project_board.name = 'Downstream'
end
end
def resource_web_url(resource)
super
rescue ResourceURLMissingError
# this particular resource does not expose a web_url property
end
def api_get_path
"/projects/#{board.project.id}/boards/#{board.id}/lists/#{id}"
end
def api_post_path
"/projects/#{board.project.id}/boards/#{board.id}/lists"
end
def api_post_body
{
board_id: board.id
}
end
end
end
end
end
end
end
end
# frozen_string_literal: true
module QA
module EE
module Resource
module Board
module BoardList
module Project
class LabelBoardList < BaseBoardList
attribute :label do
QA::Resource::Label.fabricate_via_api! do |label|
label.project = board.project
label.title = 'Doing'
end
end
def api_post_body
{
board_id: board.id,
label_id: label.id
}
end
end
end
end
end
end
end
end
# frozen_string_literal: true
module QA
module EE
module Resource
module Board
module BoardList
module Project
class MilestoneBoardList < BaseBoardList
attribute :project_milestone do
QA::EE::Resource::ProjectMilestone.fabricate_via_api! do |project_milestone|
project_milestone.project = board.project
project_milestone.title = '1.0'
end
end
def api_post_body
{
board_id: board.id,
milestone_id: project_milestone.id
}
end
end
end
end
end
end
end
end
# frozen_string_literal: true
module QA
module EE
module Resource
module Board
class GroupBoard < BaseBoard
attribute :group do
QA::Resource::Group.fabricate_via_api! do |group|
group.name = 'group-with-board'
end
end
def api_get_path
"/groups/#{group.id}/boards/#{id}"
end
def api_post_path
"/groups/#{group.id}/boards"
end
end
end
end
end
end
# frozen_string_literal: true
module QA
module EE
module Resource
module Board
class ProjectBoard < BaseBoard
attribute :project do
QA::Resource::Project.fabricate_via_api! do |project|
project.name = 'project-with-board'
end
end
def api_get_path
"/projects/#{project.id}/boards/#{id}"
end
def api_post_path
"/projects/#{project.id}/boards"
end
end
end
end
end
end
# frozen_string_literal: true
module QA
module EE
module Resource
module BoardList
class BaseBoardList < QA::Resource::Base
attribute :id
attribute :project do
QA::Resource::Project.fabricate_via_api! do |resource|
resource.name = 'project-with-board-list'
end
end
attribute :board do
QA::EE::Resource::Board.fabricate_via_api! do |b|
b.project = project
b.name = 'Downstream'
end
end
def resource_web_url(resource)
super
rescue ResourceURLMissingError
# this particular resource does not expose a web_url property
end
def api_get_path
"/projects/#{board.project.id}/boards/#{board.id}/lists/#{id}"
end
def api_post_path
"/projects/#{board.project.id}/boards/#{board.id}/lists"
end
def api_post_body
{
board_id: board.id
}
end
end
end
end
end
end
# frozen_string_literal: true
module QA
module EE
module Resource
module BoardList
class MilestoneBoardList < BaseBoardList
attribute :project_milestone do
QA::EE::Resource::ProjectMilestone.fabricate_via_api! do |m|
m.project = board.project
m.title = '1.0'
end
end
def api_post_body
{
board_id: board.id,
milestone_id: project_milestone.id
}
end
end
end
end
end
end
# frozen_string_literal: true
require 'securerandom'
module QA
module EE
module Resource
class Board < QA::Resource::Base
class GroupLabel < Base
attr_accessor :description, :color
attribute :id
attribute :name
attribute :title
attribute :project do
QA::Resource::Project.fabricate_via_api! do |resource|
resource.name = 'project-with-board'
attribute :group do
Group.fabricate_via_api! do |resource|
resource.name = 'group-with-label'
end
end
def initialize
@title = "qa-test-#{SecureRandom.hex(8)}"
@description = 'This is a test group label'
@color = '#6655FF'
end
def resource_web_url(resource)
super
rescue ResourceURLMissingError
......@@ -20,16 +30,18 @@ module QA
end
def api_get_path
"/projects/#{project.id}/boards/#{id}"
raise NotImplementedError, "The Labels API doesn't expose a single-resource endpoint so this method cannot be properly implemented."
end
def api_post_path
"/projects/#{project.id}/boards"
"/groups/#{group.id}/labels"
end
def api_post_body
{
name: name
color: @color,
name: @title,
description: @description
}
end
end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment