Skip to content

Add support for groups #20

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 27 additions & 0 deletions lib/togglv8/groups.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
module TogglV8
class API

##
# ---------
# :section: Groups
#
# name : The name of the group (string, required)
# wid : workspace ID, where the group will be used (integer, required)
# at : timestamp that is sent in the response, indicates the time group was last updated
#
# See https://github.com/toggl/toggl_api_docs/blob/master/chapters/groups.md

def create_group(params)
requireParams(params, ['name', 'wid'])
post "groups", { 'group' => params }
end

def update_group(group_id, params)
put "groups/#{group_id}", { 'group' => params }
end

def delete_group(group_id)
delete "groups/#{group_id}"
end
end
end
13 changes: 1 addition & 12 deletions lib/togglv8/togglv8.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
require_relative 'clients'
require_relative 'dashboard'
require_relative 'groups'
require_relative 'project_users'
require_relative 'projects'
require_relative 'tags'
Expand Down Expand Up @@ -41,15 +42,3 @@ def initialize(username=nil, password=API_TOKEN, opts={})
end
end
end












2 changes: 1 addition & 1 deletion lib/togglv8/users.rb
Original file line number Diff line number Diff line change
Expand Up @@ -71,4 +71,4 @@ def create_user(params)
post "signups", { 'user' => params }
end
end
end
end
4 changes: 4 additions & 0 deletions lib/togglv8/workspaces.rb
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,10 @@ def clients(workspace_id=nil)
end
end

def groups(workspace_id)
get "workspaces/#{workspace_id}/groups"
end

def projects(workspace_id, params={})
active = params.has_key?(:active) ? "?active=#{params[:active]}" : ""
get "workspaces/#{workspace_id}/projects#{active}"
Expand Down
56 changes: 56 additions & 0 deletions spec/lib/togglv8/groups_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
describe 'Groups' do
before :all do
@toggl = TogglV8::API.new(Testing::API_TOKEN)
@workspaces = @toggl.workspaces
@workspace_id = @workspaces.first['id']
end

context 'new group' do
before :all do
@group = @toggl.create_group({
'name' => 'group 1',
'wid' => @workspace_id,
})
group_ids = @toggl.groups(@workspace_id).map { |g| g['id'] }
expect(group_ids).to eq [ @group['id'] ]
end

after :all do
TogglV8SpecHelper.delete_all_groups(@toggl)
groups = @toggl.groups(@workspace_id)
expect(groups).to be_empty
end

it 'creates a group' do
expect(@group).to_not be nil
expect(@group['name']).to eq 'group 1'
expect(@group['wid']).to eq @workspace_id
end

it 'returns group associated with workspace_id' do
groups = @toggl.groups(@workspace_id)
expect(groups).not_to be_empty
expect(groups.first['name']).to eq 'group 1'
expect(groups.first['wid']).to eq @workspace_id
end
end

context 'updated group' do
before :each do
@group = @toggl.create_group({ 'name' => 'group to update', 'wid' => @workspace_id })
end

after :each do
@toggl.delete_group(@group['id'])
end

it 'updates group data' do
new_values = {
'name' => 'group 2',
}

group = @toggl.update_group(@group['id'], new_values)
expect(group).to include(new_values)
end
end
end
11 changes: 11 additions & 0 deletions spec/togglv8_spec_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,17 @@ def self.delete_all_clients(toggl)
end
end

def self.delete_all_groups(toggl)
groups = toggl.groups(@default_workspace_id)
unless groups.nil?
group_ids ||= groups.map { |g| g['id'] }
# logger.debug("Deleting #{group_ids.length} groups")
group_ids.each do |g_id|
toggl.delete_group(g_id)
end
end
end

def self.delete_all_projects(toggl)
projects = toggl.projects(@default_workspace_id)
unless projects.nil?
Expand Down