require 'zabbixapi'
require 'json'

# settings
api_url = 'http://zabbix.local/api_jsonrpc.php'
api_login = 'Admin'
api_password = 'zabbix'


zbx = Zabbix::ZabbixApi.new(api_url, api_login, api_password)
#zbx.debug = true

# 01. Create group
describe Zabbix::ZabbixApi, "create_group" do
  it "Create some group" do
    result = zbx.add_group('some_group')
    result.should be_kind_of(Integer)
  end
end

# 02. Get group_id
describe Zabbix::ZabbixApi, "get_group_id" do
  it "Get group_id" do
    result = zbx.get_group_id('some_group')
    result.should be_kind_of(Integer)
  end
end

# 03. Get unknown group_id
describe Zabbix::ZabbixApi, "get_group_id" do
  it "Get unknown group" do
    result = zbx.get_group_id('___some_group')
    result.should be_nil
  end
end

# 04. Create host
host_options = { 
  "ip"     => '127.0.0.1',
  "dns"    => 'my.example.com',
  "host"   => 'my.example.com',
  "useip"  => 1,
  "groups" => [1]
}
describe Zabbix::ZabbixApi, "create_host" do
  it "Create host" do
    result = zbx.add_host(host_options)
    result.should be_kind_of(Integer)
  end
end

# 05. Get host
describe Zabbix::ZabbixApi, "get_host" do
  it "Get host by name" do
    result = zbx.get_host_id('my.example.com')
    result.should be_kind_of(Integer)
  end
end

# 06. Get unknown host
describe Zabbix::ZabbixApi, "get_host" do
  it "Get unknown host by name" do
    result = zbx.get_host_id('___my.example.com')
    result.should be_nil
  end
end

# 07. Delete host
describe Zabbix::ZabbixApi, "delete_host" do
  it "Delete host" do
    result = zbx.delete_host('my.example.com')
    result.should be_kind_of(Integer)
  end
end

# 08. Delete unknown host
describe Zabbix::ZabbixApi, "delete_unknown_host" do
  it "Delete unknown host" do
    result = zbx.delete_host('__my.example.com')
    result.should be_nil
  end
end

# 09. Delete group
describe Zabbix::ZabbixApi, "delete_group" do
  it "Delete some group" do
    result = zbx.delete_group('some_group')
    result.should be_kind_of(Integer)
  end
end

# 10. Delete unknown group
describe Zabbix::ZabbixApi, "delete_unknown_group" do
  it "Delete unknown group" do
    result = zbx.delete_group('___some_group')
    result.should be_nil
  end
end

# 11. Mediatype create
mediatype_options = { 
  'type' => '0', #email
  'description' => 'example_mediatype',
  'smtp_server' => 'test.company.com',
  'smtp_helo'   => 'test.company.com',
  'smtp_email'  => 'test@test.company.com',
}
describe Zabbix::ZabbixApi, "create_mediatype" do
  it "Create mediatype" do
    result = zbx.add_mediatype(mediatype_options)
    result.should be_kind_of(Integer)
  end
end

# 12. Mediatype unknown delete
describe Zabbix::ZabbixApi, "delete_unknown_mediatype" do
  it "Delete unknown mediatype" do
    result = zbx.delete_mediatype('__example_mediatype')
    result.should be_nil
  end
end

# 13. Mediatype delete
describe Zabbix::ZabbixApi, "delete_mediatype" do
  it "Delete mediatype" do
    result = zbx.delete_mediatype('example_mediatype')
    result.should be_kind_of(Integer)
  end
end