package integrations

// This was intentionally added under the integrations package and not the integrations test package
// so that changes in other parts of the code base that may have an effect on these test will not
// compile until they are fixed.

import (
	"bytes"
	"context"
	"encoding/json"
	"fmt"
	"io/ioutil"

	"net/http"
	"testing"
	"time"

	"github.com/influxdata/influxdb/v2/chronograf"
	"github.com/influxdata/influxdb/v2/chronograf/bolt"
	"github.com/influxdata/influxdb/v2/chronograf/oauth2"
	"github.com/influxdata/influxdb/v2/chronograf/server"
)

func TestServer(t *testing.T) {
	type fields struct {
		Organizations []chronograf.Organization
		Mappings      []chronograf.Mapping
		Users         []chronograf.User
		Sources       []chronograf.Source
		Servers       []chronograf.Server
		Layouts       []chronograf.Layout
		Dashboards    []chronograf.Dashboard
		Config        *chronograf.Config
	}
	type args struct {
		server    *server.Server
		method    string
		path      string
		payload   interface{} // Expects this to be a json serializable struct
		principal oauth2.Principal
	}
	type wants struct {
		statusCode  int
		contentType string
		body        string
	}

	tests := []struct {
		name    string
		subName string
		fields  fields
		args    args
		wants   wants
	}{
		//		{
		//			name:    "GET /sources/5000",
		//			subName: "Get specific source; including Canned source",
		//			fields: fields{
		//				Users: []chronograf.User{
		//					{
		//						ID:         1, // This is artificial, but should be reflective of the users actual ID
		//						Name:       "billibob",
		//						Provider:   "github",
		//						Scheme:     "oauth2",
		//						SuperAdmin: true,
		//						Roles: []chronograf.Role{
		//							{
		//								Name:         "admin",
		//								Organization: "default",
		//							},
		//							{
		//								Name:         "viewer",
		//								Organization: "howdy", // from canned testdata
		//							},
		//						},
		//					},
		//				},
		//			},
		//			args: args{
		//				server: &server.Server{
		//					GithubClientID:     "not empty",
		//					GithubClientSecret: "not empty",
		//				},
		//				method: "GET",
		//				path:   "/chronograf/v1/sources/5000",
		//				principal: oauth2.Principal{
		//					Organization: "howdy",
		//					Subject:      "billibob",
		//					Issuer:       "github",
		//				},
		//			},
		//			wants: wants{
		//				statusCode: 200,
		//				body: `
		//{
		//  "id": "5000",
		//  "name": "Influx 1",
		//  "type": "influx-enterprise",
		//  "username": "user1",
		//  "url": "http://localhost:8086",
		//  "metaUrl": "http://metaurl.com",
		//  "default": true,
		//  "telegraf": "telegraf",
		//  "organization": "howdy",
		//	"defaultRP": "",
		//	"authentication": "basic",
		//  "links": {
		//    "self": "/chronograf/v1/sources/5000",
		//    "kapacitors": "/chronograf/v1/sources/5000/kapacitors",
		//    "services": "/chronograf/v1/sources/5000/services",
		//    "proxy": "/chronograf/v1/sources/5000/proxy",
		//    "queries": "/chronograf/v1/sources/5000/queries",
		//    "write": "/chronograf/v1/sources/5000/write",
		//    "permissions": "/chronograf/v1/sources/5000/permissions",
		//    "users": "/chronograf/v1/sources/5000/users",
		//    "roles": "/chronograf/v1/sources/5000/roles",
		//    "databases": "/chronograf/v1/sources/5000/dbs",
		//    "annotations": "/chronograf/v1/sources/5000/annotations",
		//    "health": "/chronograf/v1/sources/5000/health"
		//  }
		//}
		//`,
		//			},
		//		},
		//		{
		//			name:    "GET /sources/5000/kapacitors/5000",
		//			subName: "Get specific kapacitors; including Canned kapacitors",
		//			fields: fields{
		//				Users: []chronograf.User{
		//					{
		//						ID:         1, // This is artificial, but should be reflective of the users actual ID
		//						Name:       "billibob",
		//						Provider:   "github",
		//						Scheme:     "oauth2",
		//						SuperAdmin: true,
		//						Roles: []chronograf.Role{
		//							{
		//								Name:         "admin",
		//								Organization: "default",
		//							},
		//							{
		//								Name:         "viewer",
		//								Organization: "howdy", // from canned testdata
		//							},
		//						},
		//					},
		//				},
		//			},
		//			args: args{
		//				server: &server.Server{
		//					GithubClientID:     "not empty",
		//					GithubClientSecret: "not empty",
		//				},
		//				method: "GET",
		//				path:   "/chronograf/v1/sources/5000/kapacitors/5000",
		//				principal: oauth2.Principal{
		//					Organization: "howdy",
		//					Subject:      "billibob",
		//					Issuer:       "github",
		//				},
		//			},
		//			wants: wants{
		//				statusCode: 200,
		//				body: `
		//{
		//  "id": "5000",
		//  "name": "Kapa 1",
		//  "url": "http://localhost:9092",
		//  "active": true,
		//  "insecureSkipVerify": false,
		//  "links": {
		//    "proxy": "/chronograf/v1/sources/5000/kapacitors/5000/proxy",
		//    "self": "/chronograf/v1/sources/5000/kapacitors/5000",
		//    "rules": "/chronograf/v1/sources/5000/kapacitors/5000/rules",
		//    "tasks": "/chronograf/v1/sources/5000/kapacitors/5000/proxy?path=/kapacitor/v1/tasks",
		//    "ping": "/chronograf/v1/sources/5000/kapacitors/5000/proxy?path=/kapacitor/v1/ping"
		//  }
		//}
		//`,
		//			},
		//		},
		//		{
		//			name:    "GET /sources/5000/kapacitors",
		//			subName: "Get all kapacitors; including Canned kapacitors",
		//			fields: fields{
		//				Users: []chronograf.User{
		//					{
		//						ID:         1, // This is artificial, but should be reflective of the users actual ID
		//						Name:       "billibob",
		//						Provider:   "github",
		//						Scheme:     "oauth2",
		//						SuperAdmin: true,
		//						Roles: []chronograf.Role{
		//							{
		//								Name:         "admin",
		//								Organization: "default",
		//							},
		//							{
		//								Name:         "viewer",
		//								Organization: "howdy", // from canned testdata
		//							},
		//						},
		//					},
		//				},
		//			},
		//			args: args{
		//				server: &server.Server{
		//					GithubClientID:     "not empty",
		//					GithubClientSecret: "not empty",
		//				},
		//				method: "GET",
		//				path:   "/chronograf/v1/sources/5000/kapacitors",
		//				principal: oauth2.Principal{
		//					Organization: "howdy",
		//					Subject:      "billibob",
		//					Issuer:       "github",
		//				},
		//			},
		//			wants: wants{
		//				statusCode: 200,
		//				body: `
		//{
		//  "kapacitors": [
		//    {
		//      "id": "5000",
		//      "name": "Kapa 1",
		//      "url": "http://localhost:9092",
		//      "active": true,
		//      "insecureSkipVerify": false,
		//      "links": {
		//        "proxy": "/chronograf/v1/sources/5000/kapacitors/5000/proxy",
		//        "self": "/chronograf/v1/sources/5000/kapacitors/5000",
		//        "rules": "/chronograf/v1/sources/5000/kapacitors/5000/rules",
		//        "tasks": "/chronograf/v1/sources/5000/kapacitors/5000/proxy?path=/kapacitor/v1/tasks",
		//        "ping": "/chronograf/v1/sources/5000/kapacitors/5000/proxy?path=/kapacitor/v1/ping"
		//      }
		//    }
		//  ]
		//}
		//`,
		//			},
		//		},
		//		{
		//			name:    "GET /sources",
		//			subName: "Get all sources; including Canned sources",
		//			fields: fields{
		//				Users: []chronograf.User{
		//					{
		//						ID:         1, // This is artificial, but should be reflective of the users actual ID
		//						Name:       "billibob",
		//						Provider:   "github",
		//						Scheme:     "oauth2",
		//						SuperAdmin: true,
		//						Roles: []chronograf.Role{
		//							{
		//								Name:         "admin",
		//								Organization: "default",
		//							},
		//							{
		//								Name:         "viewer",
		//								Organization: "howdy", // from canned testdata
		//							},
		//						},
		//					},
		//				},
		//			},
		//			args: args{
		//				server: &server.Server{
		//					GithubClientID:     "not empty",
		//					GithubClientSecret: "not empty",
		//				},
		//				method: "GET",
		//				path:   "/chronograf/v1/sources",
		//				principal: oauth2.Principal{
		//					Organization: "howdy",
		//					Subject:      "billibob",
		//					Issuer:       "github",
		//				},
		//			},
		//			wants: wants{
		//				statusCode: 200,
		//				body: `
		//{
		//  "sources": [
		//    {
		//      "id": "5000",
		//      "name": "Influx 1",
		//      "type": "influx-enterprise",
		//      "username": "user1",
		//      "url": "http://localhost:8086",
		//      "metaUrl": "http://metaurl.com",
		//      "default": true,
		//      "telegraf": "telegraf",
		//      "organization": "howdy",
		//			"defaultRP": "",
		//			"authentication": "basic",
		//      "links": {
		//        "self": "/chronograf/v1/sources/5000",
		//        "kapacitors": "/chronograf/v1/sources/5000/kapacitors",
		//        "services": "/chronograf/v1/sources/5000/services",
		//        "proxy": "/chronograf/v1/sources/5000/proxy",
		//        "queries": "/chronograf/v1/sources/5000/queries",
		//        "write": "/chronograf/v1/sources/5000/write",
		//        "permissions": "/chronograf/v1/sources/5000/permissions",
		//        "users": "/chronograf/v1/sources/5000/users",
		//        "roles": "/chronograf/v1/sources/5000/roles",
		//        "databases": "/chronograf/v1/sources/5000/dbs",
		//        "annotations": "/chronograf/v1/sources/5000/annotations",
		//        "health": "/chronograf/v1/sources/5000/health"
		//      }
		//    }
		//  ]
		//}
		//`,
		//			},
		//		},
		//		{
		//			name:    "GET /organizations",
		//			subName: "Get all organizations; including Canned organization",
		//			fields: fields{
		//				Users: []chronograf.User{
		//					{
		//						ID:         1, // This is artificial, but should be reflective of the users actual ID
		//						Name:       "billibob",
		//						Provider:   "github",
		//						Scheme:     "oauth2",
		//						SuperAdmin: true,
		//						Roles: []chronograf.Role{
		//							{
		//								Name:         "admin",
		//								Organization: "default",
		//							},
		//						},
		//					},
		//				},
		//			},
		//			args: args{
		//				server: &server.Server{
		//					GithubClientID:     "not empty",
		//					GithubClientSecret: "not empty",
		//				},
		//				method: "GET",
		//				path:   "/chronograf/v1/organizations",
		//				principal: oauth2.Principal{
		//					Organization: "default",
		//					Subject:      "billibob",
		//					Issuer:       "github",
		//				},
		//			},
		//			wants: wants{
		//				statusCode: 200,
		//				body: `
		//{
		//  "links": {
		//    "self": "/chronograf/v1/organizations"
		//  },
		//  "organizations": [
		//    {
		//      "links": {
		//        "self": "/chronograf/v1/organizations/default"
		//      },
		//      "id": "default",
		//      "name": "Default",
		//      "defaultRole": "member"
		//    },
		//    {
		//      "links": {
		//        "self": "/chronograf/v1/organizations/howdy"
		//      },
		//      "id": "howdy",
		//      "name": "An Organization",
		//      "defaultRole": "viewer"
		//    }
		//  ]
		//}`,
		//			},
		//		},
		//		{
		//			name:    "GET /organizations/howdy",
		//			subName: "Get specific organizations; Canned organization",
		//			fields: fields{
		//				Users: []chronograf.User{
		//					{
		//						ID:         1, // This is artificial, but should be reflective of the users actual ID
		//						Name:       "billibob",
		//						Provider:   "github",
		//						Scheme:     "oauth2",
		//						SuperAdmin: true,
		//						Roles: []chronograf.Role{
		//							{
		//								Name:         "admin",
		//								Organization: "default",
		//							},
		//						},
		//					},
		//				},
		//			},
		//			args: args{
		//				server: &server.Server{
		//					GithubClientID:     "not empty",
		//					GithubClientSecret: "not empty",
		//				},
		//				method: "GET",
		//				path:   "/chronograf/v1/organizations/howdy",
		//				principal: oauth2.Principal{
		//					Organization: "default",
		//					Subject:      "billibob",
		//					Issuer:       "github",
		//				},
		//			},
		//			wants: wants{
		//				statusCode: 200,
		//				body: `
		//{
		//  "links": {
		//    "self": "/chronograf/v1/organizations/howdy"
		//  },
		//  "id": "howdy",
		//  "name": "An Organization",
		//  "defaultRole": "viewer"
		//}`,
		//			},
		//		},
		//		{
		//			name:    "GET /dashboards/1000",
		//			subName: "Get specific in the howdy organization; Using Canned testdata",
		//			fields: fields{
		//				Users: []chronograf.User{
		//					{
		//						ID:         1, // This is artificial, but should be reflective of the users actual ID
		//						Name:       "billibob",
		//						Provider:   "github",
		//						Scheme:     "oauth2",
		//						SuperAdmin: true,
		//						Roles: []chronograf.Role{
		//							{
		//								Name:         "admin",
		//								Organization: "howdy",
		//							},
		//						},
		//					},
		//				},
		//			},
		//			args: args{
		//				server: &server.Server{
		//					GithubClientID:     "not empty",
		//					GithubClientSecret: "not empty",
		//				},
		//				method: "GET",
		//				path:   "/chronograf/v1/dashboards/1000",
		//				principal: oauth2.Principal{
		//					Organization: "howdy",
		//					Subject:      "billibob",
		//					Issuer:       "github",
		//				},
		//			},
		//			wants: wants{
		//				statusCode: 200,
		//				body: `
		//{
		//  "id": 1000,
		//  "cells": [
		//    {
		//      "i": "8f61c619-dd9b-4761-8aa8-577f27247093",
		//      "x": 0,
		//      "y": 0,
		//      "w": 11,
		//      "h": 5,
		//      "name": "Untitled Cell",
		//      "queries": [
		//        {
		//          "query": "SELECT mean(\"value\") AS \"mean_value\" FROM \"telegraf\".\"autogen\".\"cpg\" WHERE time > :dashboardTime: GROUP BY time(:interval:) FILL(null)",
		//          "queryConfig": {
		//            "database": "telegraf",
		//            "measurement": "cpg",
		//            "retentionPolicy": "autogen",
		//            "fields": [
		//              {
		//                "value": "mean",
		//                "type": "func",
		//                "alias": "mean_value",
		//                "args": [
		//                  {
		//                    "value": "value",
		//                    "type": "field",
		//                    "alias": ""
		//                  }
		//                ]
		//              }
		//            ],
		//            "tags": {},
		//            "groupBy": {
		//              "time": "auto",
		//              "tags": []
		//            },
		//            "areTagsAccepted": false,
		//            "fill": "null",
		//            "rawText": null,
		//            "range": null,
		//            "shifts": null
		//          },
		//          "source": "/chronograf/v1/sources/2"
		//        }
		//      ],
		//      "axes": {
		//        "x": {
		//          "bounds": [],
		//          "label": "",
		//          "prefix": "",
		//          "suffix": "",
		//          "base": "10",
		//          "scale": "linear"
		//        },
		//        "y": {
		//          "bounds": [],
		//          "label": "",
		//          "prefix": "",
		//          "suffix": "",
		//          "base": "10",
		//          "scale": "linear"
		//        },
		//        "y2": {
		//          "bounds": [],
		//          "label": "",
		//          "prefix": "",
		//          "suffix": "",
		//          "base": "10",
		//          "scale": "linear"
		//        }
		//      },
		//      "type": "line",
		//      "colors": [
		//        {
		//          "id": "0",
		//          "type": "min",
		//          "hex": "#00C9FF",
		//          "name": "laser",
		//          "value": "0"
		//        },
		//        {
		//          "id": "1",
		//          "type": "max",
		//          "hex": "#9394FF",
		//          "name": "comet",
		//          "value": "100"
		//        }
		//      ],
		//      "legend":{
		//          "type": "static",
		//          "orientation": "bottom"
		//      },
		//      "tableOptions":{
		//        "verticalTimeAxis": false,
		//        "sortBy":{
		//          "internalName": "",
		//          "displayName": "",
		//          "visible": false
		//        },
		//        "wrapping": "",
		//        "fixFirstColumn": false
		//      },
		//      "fieldOptions": null,
		//      "timeFormat": "",
		//      "decimalPlaces":{
		//        "isEnforced": false,
		//        "digits": 0
		//      },
		//      "links": {
		//        "self": "/chronograf/v1/dashboards/1000/cells/8f61c619-dd9b-4761-8aa8-577f27247093"
		//      }
		//    }
		//  ],
		//  "templates": [
		//    {
		//      "tempVar": ":dbs:",
		//      "values": [
		//        {
		//          "value": "_internal",
		//          "type": "database",
		//          "selected": true
		//        },
		//        {
		//          "value": "telegraf",
		//          "type": "database",
		//          "selected": false
		//        },
		//        {
		//          "value": "tensorflowdb",
		//          "type": "database",
		//          "selected": false
		//        },
		//        {
		//          "value": "pushgateway",
		//          "type": "database",
		//          "selected": false
		//        },
		//        {
		//          "value": "node_exporter",
		//          "type": "database",
		//          "selected": false
		//        },
		//        {
		//          "value": "mydb",
		//          "type": "database",
		//          "selected": false
		//        },
		//        {
		//          "value": "tiny",
		//          "type": "database",
		//          "selected": false
		//        },
		//        {
		//          "value": "blah",
		//          "type": "database",
		//          "selected": false
		//        },
		//        {
		//          "value": "test",
		//          "type": "database",
		//          "selected": false
		//        },
		//        {
		//          "value": "chronograf",
		//          "type": "database",
		//          "selected": false
		//        },
		//        {
		//          "value": "db_name",
		//          "type": "database",
		//          "selected": false
		//        },
		//        {
		//          "value": "demo",
		//          "type": "database",
		//          "selected": false
		//        },
		//        {
		//          "value": "eeg",
		//          "type": "database",
		//          "selected": false
		//        },
		//        {
		//          "value": "solaredge",
		//          "type": "database",
		//          "selected": false
		//        },
		//        {
		//          "value": "zipkin",
		//          "type": "database",
		//          "selected": false
		//        }
		//      ],
		//      "id": "e7e498bf-5869-4874-9071-24628a2cda63",
		//      "type": "databases",
		//      "label": "",
		//      "query": {
		//        "influxql": "SHOW DATABASES",
		//        "measurement": "",
		//        "tagKey": "",
		//        "fieldKey": ""
		//      },
		//      "links": {
		//        "self": "/chronograf/v1/dashboards/1000/templates/e7e498bf-5869-4874-9071-24628a2cda63"
		//      }
		//    }
		//  ],
		//  "name": "Name This Dashboard",
		//  "organization": "howdy",
		//  "links": {
		//    "self": "/chronograf/v1/dashboards/1000",
		//    "cells": "/chronograf/v1/dashboards/1000/cells",
		//    "templates": "/chronograf/v1/dashboards/1000/templates"
		//  }
		//}`,
		//			},
		//		},
		//		{
		//			name:    "GET /dashboards",
		//			subName: "Get all dashboards in the howdy organization; Using Canned testdata",
		//			fields: fields{
		//				Users: []chronograf.User{
		//					{
		//						ID:         1, // This is artificial, but should be reflective of the users actual ID
		//						Name:       "billibob",
		//						Provider:   "github",
		//						Scheme:     "oauth2",
		//						SuperAdmin: true,
		//						Roles: []chronograf.Role{
		//							{
		//								Name:         "admin",
		//								Organization: "default",
		//							},
		//							{
		//								Name:         "admin",
		//								Organization: "howdy",
		//							},
		//						},
		//					},
		//				},
		//			},
		//			args: args{
		//				server: &server.Server{
		//					GithubClientID:     "not empty",
		//					GithubClientSecret: "not empty",
		//				},
		//				method: "GET",
		//				path:   "/chronograf/v1/dashboards",
		//				principal: oauth2.Principal{
		//					Organization: "howdy",
		//					Subject:      "billibob",
		//					Issuer:       "github",
		//				},
		//			},
		//			wants: wants{
		//				statusCode: 200,
		//				body: `
		//{
		//  "dashboards": [
		//    {
		//      "id": 1000,
		//      "cells": [
		//        {
		//          "i": "8f61c619-dd9b-4761-8aa8-577f27247093",
		//          "x": 0,
		//          "y": 0,
		//          "w": 11,
		//          "h": 5,
		//          "name": "Untitled Cell",
		//          "queries": [
		//            {
		//              "query": "SELECT mean(\"value\") AS \"mean_value\" FROM \"telegraf\".\"autogen\".\"cpg\" WHERE time > :dashboardTime: GROUP BY time(:interval:) FILL(null)",
		//              "queryConfig": {
		//                "database": "telegraf",
		//                "measurement": "cpg",
		//                "retentionPolicy": "autogen",
		//                "fields": [
		//                  {
		//                    "value": "mean",
		//                    "type": "func",
		//                    "alias": "mean_value",
		//                    "args": [
		//                      {
		//                        "value": "value",
		//                        "type": "field",
		//                        "alias": ""
		//                      }
		//                    ]
		//                  }
		//                ],
		//                "tags": {},
		//                "groupBy": {
		//                  "time": "auto",
		//                  "tags": []
		//                },
		//                "areTagsAccepted": false,
		//                "fill": "null",
		//                "rawText": null,
		//                "range": null,
		//                "shifts": null
		//              },
		//              "source": "/chronograf/v1/sources/2"
		//            }
		//          ],
		//          "axes": {
		//            "x": {
		//              "bounds": [],
		//              "label": "",
		//              "prefix": "",
		//              "suffix": "",
		//              "base": "10",
		//              "scale": "linear"
		//            },
		//            "y": {
		//              "bounds": [],
		//              "label": "",
		//              "prefix": "",
		//              "suffix": "",
		//              "base": "10",
		//              "scale": "linear"
		//            },
		//            "y2": {
		//              "bounds": [],
		//              "label": "",
		//              "prefix": "",
		//              "suffix": "",
		//              "base": "10",
		//              "scale": "linear"
		//            }
		//          },
		//          "type": "line",
		//          "colors": [
		//            {
		//              "id": "0",
		//              "type": "min",
		//              "hex": "#00C9FF",
		//              "name": "laser",
		//              "value": "0"
		//            },
		//            {
		//              "id": "1",
		//              "type": "max",
		//              "hex": "#9394FF",
		//              "name": "comet",
		//              "value": "100"
		//            }
		//           ],
		//          "legend": {
		//            "type": "static",
		//            "orientation": "bottom"
		//          },
		//          "tableOptions":{
		//            "verticalTimeAxis": false,
		//            "sortBy":{
		//              "internalName": "",
		//              "displayName": "",
		//              "visible": false
		//            },
		//            "wrapping": "",
		//            "fixFirstColumn": false
		//          },
		//          "fieldOptions": null,
		//          "timeFormat": "",
		//          "decimalPlaces":{
		//            "isEnforced": false,
		//            "digits": 0
		//          },
		//          "links": {
		//            "self": "/chronograf/v1/dashboards/1000/cells/8f61c619-dd9b-4761-8aa8-577f27247093"
		//          }
		//        }
		//      ],
		//      "templates": [
		//        {
		//          "tempVar": ":dbs:",
		//          "values": [
		//            {
		//              "value": "_internal",
		//              "type": "database",
		//              "selected": true
		//            },
		//            {
		//              "value": "telegraf",
		//              "type": "database",
		//              "selected": false
		//            },
		//            {
		//              "value": "tensorflowdb",
		//              "type": "database",
		//              "selected": false
		//            },
		//            {
		//              "value": "pushgateway",
		//              "type": "database",
		//              "selected": false
		//            },
		//            {
		//              "value": "node_exporter",
		//              "type": "database",
		//              "selected": false
		//            },
		//            {
		//              "value": "mydb",
		//              "type": "database",
		//              "selected": false
		//            },
		//            {
		//              "value": "tiny",
		//              "type": "database",
		//              "selected": false
		//            },
		//            {
		//              "value": "blah",
		//              "type": "database",
		//              "selected": false
		//            },
		//            {
		//              "value": "test",
		//              "type": "database",
		//              "selected": false
		//            },
		//            {
		//              "value": "chronograf",
		//              "type": "database",
		//              "selected": false
		//            },
		//            {
		//              "value": "db_name",
		//              "type": "database",
		//              "selected": false
		//            },
		//            {
		//              "value": "demo",
		//              "type": "database",
		//              "selected": false
		//            },
		//            {
		//              "value": "eeg",
		//              "type": "database",
		//              "selected": false
		//            },
		//            {
		//              "value": "solaredge",
		//              "type": "database",
		//              "selected": false
		//            },
		//            {
		//              "value": "zipkin",
		//              "type": "database",
		//              "selected": false
		//            }
		//          ],
		//          "id": "e7e498bf-5869-4874-9071-24628a2cda63",
		//          "type": "databases",
		//          "label": "",
		//          "query": {
		//            "influxql": "SHOW DATABASES",
		//            "measurement": "",
		//            "tagKey": "",
		//            "fieldKey": ""
		//          },
		//          "links": {
		//            "self": "/chronograf/v1/dashboards/1000/templates/e7e498bf-5869-4874-9071-24628a2cda63"
		//          }
		//        }
		//      ],
		//      "name": "Name This Dashboard",
		//      "organization": "howdy",
		//      "links": {
		//        "self": "/chronograf/v1/dashboards/1000",
		//        "cells": "/chronograf/v1/dashboards/1000/cells",
		//        "templates": "/chronograf/v1/dashboards/1000/templates"
		//      }
		//    }
		//  ]
		//}`,
		//			},
		//		},
		//		{
		//			name:    "GET /users",
		//			subName: "User Not Found in the Default Organization",
		//			fields: fields{
		//				Users: []chronograf.User{},
		//			},
		//			args: args{
		//				server: &server.Server{
		//					GithubClientID:     "not empty",
		//					GithubClientSecret: "not empty",
		//				},
		//				method: "GET",
		//				path:   "/chronograf/v1/organizations/default/users",
		//				principal: oauth2.Principal{
		//					Organization: "default",
		//					Subject:      "billibob",
		//					Issuer:       "github",
		//				},
		//			},
		//			wants: wants{
		//				statusCode: 403,
		//				body:       `{"code":403,"message":"User is not authorized"}`,
		//			},
		//		},
		//		{
		//			name:    "GET /users",
		//			subName: "Single User in the Default Organization as SuperAdmin",
		//			fields: fields{
		//				Users: []chronograf.User{
		//					{
		//						ID:         1, // This is artificial, but should be reflective of the users actual ID
		//						Name:       "billibob",
		//						Provider:   "github",
		//						Scheme:     "oauth2",
		//						SuperAdmin: true,
		//						Roles: []chronograf.Role{
		//							{
		//								Name:         "admin",
		//								Organization: "default",
		//							},
		//						},
		//					},
		//				},
		//			},
		//			args: args{
		//				server: &server.Server{
		//					GithubClientID:     "not empty",
		//					GithubClientSecret: "not empty",
		//				},
		//				method: "GET",
		//				path:   "/chronograf/v1/organizations/default/users",
		//				principal: oauth2.Principal{
		//					Organization: "default",
		//					Subject:      "billibob",
		//					Issuer:       "github",
		//				},
		//			},
		//			wants: wants{
		//				statusCode: 200,
		//				body: `
		//{
		//  "links": {
		//    "self": "/chronograf/v1/organizations/default/users"
		//  },
		//  "users": [
		//    {
		//      "links": {
		//        "self": "/chronograf/v1/organizations/default/users/1"
		//      },
		//      "id": "1",
		//      "name": "billibob",
		//      "provider": "github",
		//      "scheme": "oauth2",
		//      "superAdmin": true,
		//      "roles": [
		//        {
		//          "name": "admin",
		//          "organization": "default"
		//        }
		//      ]
		//    }
		//  ]
		//}`,
		//			},
		//		},
		//		{
		//			name:    "GET /users",
		//			subName: "Two users in two organizations; user making request is as SuperAdmin with out raw query param",
		//			fields: fields{
		//				Users: []chronograf.User{
		//					{
		//						ID:         1, // This is artificial, but should be reflective of the users actual ID
		//						Name:       "billibob",
		//						Provider:   "github",
		//						Scheme:     "oauth2",
		//						SuperAdmin: true,
		//						Roles: []chronograf.Role{
		//							{
		//								Name:         "admin",
		//								Organization: "default",
		//							},
		//						},
		//					},
		//					{
		//						ID:         2, // This is artificial, but should be reflective of the users actual ID
		//						Name:       "billietta",
		//						Provider:   "github",
		//						Scheme:     "oauth2",
		//						SuperAdmin: true,
		//						Roles: []chronograf.Role{
		//							{
		//								Name:         "admin",
		//								Organization: "cool",
		//							},
		//						},
		//					},
		//				},
		//			},
		//			args: args{
		//				server: &server.Server{
		//					GithubClientID:     "not empty",
		//					GithubClientSecret: "not empty",
		//				},
		//				method: "GET",
		//				path:   "/chronograf/v1/organizations/default/users",
		//				principal: oauth2.Principal{
		//					Organization: "default",
		//					Subject:      "billibob",
		//					Issuer:       "github",
		//				},
		//			},
		//			wants: wants{
		//				statusCode: 200,
		//				body: `
		//{
		//  "links": {
		//    "self": "/chronograf/v1/organizations/default/users"
		//  },
		//  "users": [
		//    {
		//      "links": {
		//        "self": "/chronograf/v1/organizations/default/users/1"
		//      },
		//      "id": "1",
		//      "name": "billibob",
		//      "provider": "github",
		//      "scheme": "oauth2",
		//      "superAdmin": true,
		//      "roles": [
		//        {
		//          "name": "admin",
		//          "organization": "default"
		//        }
		//      ]
		//    }
		//  ]
		//}
		//`,
		//			},
		//		},
		//		{
		//			name:    "POST /users",
		//			subName: "User making request is as SuperAdmin with raw query param;  being created has wildcard role",
		//			fields: fields{
		//				Users: []chronograf.User{
		//					{
		//						ID:         1, // This is artificial, but should be reflective of the users actual ID
		//						Name:       "billibob",
		//						Provider:   "github",
		//						Scheme:     "oauth2",
		//						SuperAdmin: true,
		//						Roles: []chronograf.Role{
		//							{
		//								Name:         "admin",
		//								Organization: "default",
		//							},
		//						},
		//					},
		//				},
		//			},
		//			args: args{
		//				server: &server.Server{
		//					GithubClientID:     "not empty",
		//					GithubClientSecret: "not empty",
		//				},
		//				payload: &chronograf.User{
		//					Name:     "user",
		//					Provider: "provider",
		//					Scheme:   "oauth2",
		//					Roles: []chronograf.Role{
		//						{
		//							Name:         "*",
		//							Organization: "default",
		//						},
		//					},
		//				},
		//				method: "POST",
		//				path:   "/chronograf/v1/users",
		//				principal: oauth2.Principal{
		//					Organization: "default",
		//					Subject:      "billibob",
		//					Issuer:       "github",
		//				},
		//			},
		//			wants: wants{
		//				statusCode: 201,
		//				body: `
		//{
		//  "links": {
		//    "self": "/chronograf/v1/users/2"
		//  },
		//  "id": "2",
		//  "name": "user",
		//  "provider": "provider",
		//  "scheme": "oauth2",
		//  "superAdmin": false,
		//  "roles": [
		//    {
		//      "name": "member",
		//      "organization": "default"
		//    }
		//  ]
		//}
		//`,
		//			},
		//		},
		//		{
		//			name:    "POST /users",
		//			subName: "User making request is as SuperAdmin with raw query param;  being created has no roles",
		//			fields: fields{
		//				Users: []chronograf.User{
		//					{
		//						ID:         1, // This is artificial, but should be reflective of the users actual ID
		//						Name:       "billibob",
		//						Provider:   "github",
		//						Scheme:     "oauth2",
		//						SuperAdmin: true,
		//						Roles: []chronograf.Role{
		//							{
		//								Name:         "admin",
		//								Organization: "default",
		//							},
		//						},
		//					},
		//				},
		//			},
		//			args: args{
		//				server: &server.Server{
		//					GithubClientID:     "not empty",
		//					GithubClientSecret: "not empty",
		//				},
		//				payload: &chronograf.User{
		//					Name:     "user",
		//					Provider: "provider",
		//					Scheme:   "oauth2",
		//					Roles:    []chronograf.Role{},
		//				},
		//				method: "POST",
		//				path:   "/chronograf/v1/users",
		//				principal: oauth2.Principal{
		//					Organization: "default",
		//					Subject:      "billibob",
		//					Issuer:       "github",
		//				},
		//			},
		//			wants: wants{
		//				statusCode: 201,
		//				body: `
		//{
		//  "links": {
		//    "self": "/chronograf/v1/users/2"
		//  },
		//  "id": "2",
		//  "name": "user",
		//  "provider": "provider",
		//  "scheme": "oauth2",
		//  "superAdmin": false,
		//  "roles": []
		//}
		//`,
		//			},
		//		},
		//		{
		//			name:    "GET /users",
		//			subName: "Two users in two organizations; user making request is as SuperAdmin with raw query param",
		//			fields: fields{
		//				Organizations: []chronograf.Organization{
		//					{
		//						ID:          "1",
		//						Name:        "cool",
		//						DefaultRole: roles.ViewerRoleName,
		//					},
		//				},
		//				Users: []chronograf.User{
		//					{
		//						ID:         1, // This is artificial, but should be reflective of the users actual ID
		//						Name:       "billibob",
		//						Provider:   "github",
		//						Scheme:     "oauth2",
		//						SuperAdmin: true,
		//						Roles: []chronograf.Role{
		//							{
		//								Name:         "admin",
		//								Organization: "default",
		//							},
		//						},
		//					},
		//					{
		//						ID:         2, // This is artificial, but should be reflective of the users actual ID
		//						Name:       "billietta",
		//						Provider:   "github",
		//						Scheme:     "oauth2",
		//						SuperAdmin: true,
		//						Roles: []chronograf.Role{
		//							{
		//								Name:         "admin",
		//								Organization: "1",
		//							},
		//						},
		//					},
		//				},
		//			},
		//			args: args{
		//				server: &server.Server{
		//					GithubClientID:     "not empty",
		//					GithubClientSecret: "not empty",
		//				},
		//				method: "GET",
		//				path:   "/chronograf/v1/users",
		//				principal: oauth2.Principal{
		//					Organization: "default",
		//					Subject:      "billibob",
		//					Issuer:       "github",
		//				},
		//			},
		//			wants: wants{
		//				statusCode: 200,
		//				body: `
		//{
		//  "links": {
		//    "self": "/chronograf/v1/users"
		//  },
		//  "users": [
		//    {
		//      "links": {
		//        "self": "/chronograf/v1/users/1"
		//      },
		//      "id": "1",
		//      "name": "billibob",
		//      "provider": "github",
		//      "scheme": "oauth2",
		//      "superAdmin": true,
		//      "roles": [
		//        {
		//          "name": "admin",
		//          "organization": "default"
		//        }
		//      ]
		//    },
		//    {
		//      "links": {
		//        "self": "/chronograf/v1/users/2"
		//      },
		//      "id": "2",
		//      "name": "billietta",
		//      "provider": "github",
		//      "scheme": "oauth2",
		//      "superAdmin": true,
		//      "roles": [
		//        {
		//          "name": "admin",
		//          "organization": "1"
		//        }
		//      ]
		//    }
		//  ]
		//}
		//`,
		//			},
		//		},
		//		{
		//			name:    "GET /users",
		//			subName: "Two users in two organizations; user making request is as not SuperAdmin with raw query param",
		//			fields: fields{
		//				Organizations: []chronograf.Organization{
		//					{
		//						ID:          "1",
		//						Name:        "cool",
		//						DefaultRole: roles.ViewerRoleName,
		//					},
		//				},
		//				Users: []chronograf.User{
		//					{
		//						ID:         1, // This is artificial, but should be reflective of the users actual ID
		//						Name:       "billibob",
		//						Provider:   "github",
		//						Scheme:     "oauth2",
		//						SuperAdmin: true,
		//						Roles: []chronograf.Role{
		//							{
		//								Name:         "admin",
		//								Organization: "default",
		//							},
		//						},
		//					},
		//					{
		//						ID:         2, // This is artificial, but should be reflective of the users actual ID
		//						Name:       "billietta",
		//						Provider:   "github",
		//						Scheme:     "oauth2",
		//						SuperAdmin: false,
		//						Roles: []chronograf.Role{
		//							{
		//								Name:         "admin",
		//								Organization: "default",
		//							},
		//							{
		//								Name:         "admin",
		//								Organization: "1",
		//							},
		//						},
		//					},
		//				},
		//			},
		//			args: args{
		//				server: &server.Server{
		//					GithubClientID:     "not empty",
		//					GithubClientSecret: "not empty",
		//				},
		//				method: "GET",
		//				path:   "/chronograf/v1/users",
		//				principal: oauth2.Principal{
		//					Organization: "default",
		//					Subject:      "billieta",
		//					Issuer:       "github",
		//				},
		//			},
		//			wants: wants{
		//				statusCode: 403,
		//				body: `
		//{
		//  "code": 403,
		//  "message": "User is not authorized"
		//}
		//`,
		//			},
		//		},
		//		{
		//			name:    "POST /users",
		//			subName: "Create a New User with SuperAdmin status; SuperAdminNewUsers is true (the default case); User on Principal is a SuperAdmin",
		//			fields: fields{
		//				Config: &chronograf.Config{
		//					Auth: chronograf.AuthConfig{
		//						SuperAdminNewUsers: true,
		//					},
		//				},
		//				Users: []chronograf.User{
		//					{
		//						ID:         1, // This is artificial, but should be reflective of the users actual ID
		//						Name:       "billibob",
		//						Provider:   "github",
		//						Scheme:     "oauth2",
		//						SuperAdmin: true,
		//						Roles: []chronograf.Role{
		//							{
		//								Name:         "admin",
		//								Organization: "default",
		//							},
		//						},
		//					},
		//				},
		//			},
		//			args: args{
		//				server: &server.Server{
		//					GithubClientID:     "not empty",
		//					GithubClientSecret: "not empty",
		//				},
		//				method: "POST",
		//				path:   "/chronograf/v1/organizations/default/users",
		//				payload: &chronograf.User{
		//					Name:     "user",
		//					Provider: "provider",
		//					Scheme:   "oauth2",
		//					Roles: []chronograf.Role{
		//						{
		//							Name:         roles.EditorRoleName,
		//							Organization: "default",
		//						},
		//					},
		//				},
		//				principal: oauth2.Principal{
		//					Organization: "default",
		//					Subject:      "billibob",
		//					Issuer:       "github",
		//				},
		//			},
		//			wants: wants{
		//				statusCode: 201,
		//				body: `
		//{
		//  "links": {
		//    "self": "/chronograf/v1/organizations/default/users/2"
		//  },
		//  "id": "2",
		//  "name": "user",
		//  "provider": "provider",
		//  "scheme": "oauth2",
		//  "superAdmin": true,
		//  "roles": [
		//    {
		//      "name": "editor",
		//      "organization": "default"
		//    }
		//  ]
		//}`,
		//			},
		//		},
		//		{
		//			name:    "POST /users",
		//			subName: "Create a New User with SuperAdmin status; SuperAdminNewUsers is false; User on Principal is a SuperAdmin",
		//			fields: fields{
		//				Config: &chronograf.Config{
		//					Auth: chronograf.AuthConfig{
		//						SuperAdminNewUsers: false,
		//					},
		//				},
		//				Users: []chronograf.User{
		//					{
		//						ID:         1, // This is artificial, but should be reflective of the users actual ID
		//						Name:       "billibob",
		//						Provider:   "github",
		//						Scheme:     "oauth2",
		//						SuperAdmin: true,
		//						Roles: []chronograf.Role{
		//							{
		//								Name:         "admin",
		//								Organization: "default",
		//							},
		//						},
		//					},
		//				},
		//			},
		//			args: args{
		//				server: &server.Server{
		//					GithubClientID:     "not empty",
		//					GithubClientSecret: "not empty",
		//				},
		//				method: "POST",
		//				path:   "/chronograf/v1/organizations/default/users",
		//				payload: &chronograf.User{
		//					Name:     "user",
		//					Provider: "provider",
		//					Scheme:   "oauth2",
		//					Roles: []chronograf.Role{
		//						{
		//							Name:         roles.EditorRoleName,
		//							Organization: "default",
		//						},
		//					},
		//				},
		//				principal: oauth2.Principal{
		//					Organization: "default",
		//					Subject:      "billibob",
		//					Issuer:       "github",
		//				},
		//			},
		//			wants: wants{
		//				statusCode: 201,
		//				body: `
		//{
		//  "links": {
		//    "self": "/chronograf/v1/organizations/default/users/2"
		//  },
		//  "id": "2",
		//  "name": "user",
		//  "provider": "provider",
		//  "scheme": "oauth2",
		//  "superAdmin": false,
		//  "roles": [
		//    {
		//      "name": "editor",
		//      "organization": "default"
		//    }
		//  ]
		//}`,
		//			},
		//		},
		//		{
		//			name:    "POST /users",
		//			subName: "Create a New User with SuperAdmin status; SuperAdminNewUsers is false; User on Principal is Admin, but not a SuperAdmin",
		//			fields: fields{
		//				Config: &chronograf.Config{
		//					Auth: chronograf.AuthConfig{
		//						SuperAdminNewUsers: false,
		//					},
		//				},
		//				Users: []chronograf.User{
		//					{
		//						ID:         1, // This is artificial, but should be reflective of the users actual ID
		//						Name:       "billibob",
		//						Provider:   "github",
		//						Scheme:     "oauth2",
		//						SuperAdmin: false,
		//						Roles: []chronograf.Role{
		//							{
		//								Name:         "admin",
		//								Organization: "default",
		//							},
		//						},
		//					},
		//				},
		//			},
		//			args: args{
		//				server: &server.Server{
		//					GithubClientID:     "not empty",
		//					GithubClientSecret: "not empty",
		//				},
		//				method: "POST",
		//				path:   "/chronograf/v1/organizations/default/users",
		//				payload: &chronograf.User{
		//					Name:     "user",
		//					Provider: "provider",
		//					Scheme:   "oauth2",
		//					Roles: []chronograf.Role{
		//						{
		//							Name:         roles.EditorRoleName,
		//							Organization: "default",
		//						},
		//					},
		//				},
		//				principal: oauth2.Principal{
		//					Organization: "default",
		//					Subject:      "billibob",
		//					Issuer:       "github",
		//				},
		//			},
		//			wants: wants{
		//				statusCode: 201,
		//				body: `
		//{
		//  "links": {
		//    "self": "/chronograf/v1/organizations/default/users/2"
		//  },
		//  "id": "2",
		//  "name": "user",
		//  "provider": "provider",
		//  "scheme": "oauth2",
		//  "superAdmin": false,
		//  "roles": [
		//    {
		//      "name": "editor",
		//      "organization": "default"
		//    }
		//  ]
		//}`,
		//			},
		//		},
		//		{
		//			name:    "POST /users",
		//			subName: "Create a New User with SuperAdmin status; SuperAdminNewUsers is true; User on Principal is Admin, but not a SuperAdmin",
		//			fields: fields{
		//				Config: &chronograf.Config{
		//					Auth: chronograf.AuthConfig{
		//						SuperAdminNewUsers: true,
		//					},
		//				},
		//				Users: []chronograf.User{
		//					{
		//						ID:         1, // This is artificial, but should be reflective of the users actual ID
		//						Name:       "billibob",
		//						Provider:   "github",
		//						Scheme:     "oauth2",
		//						SuperAdmin: false,
		//						Roles: []chronograf.Role{
		//							{
		//								Name:         "admin",
		//								Organization: "default",
		//							},
		//						},
		//					},
		//				},
		//			},
		//			args: args{
		//				server: &server.Server{
		//					GithubClientID:     "not empty",
		//					GithubClientSecret: "not empty",
		//				},
		//				method: "POST",
		//				path:   "/chronograf/v1/organizations/default/users",
		//				payload: &chronograf.User{
		//					Name:       "user",
		//					Provider:   "provider",
		//					Scheme:     "oauth2",
		//					SuperAdmin: true,
		//					Roles: []chronograf.Role{
		//						{
		//							Name:         roles.EditorRoleName,
		//							Organization: "default",
		//						},
		//					},
		//				},
		//				principal: oauth2.Principal{
		//					Organization: "default",
		//					Subject:      "billibob",
		//					Issuer:       "github",
		//				},
		//			},
		//			wants: wants{
		//				statusCode: 401,
		//				body: `
		//{
		//  "code": 401,
		//  "message": "user does not have authorization required to set SuperAdmin status. See https://github.com/influxdata/influxdb/chronograf/issues/2601 for more information."
		//}`,
		//			},
		//		},
		//		{
		//			name:    "POST /users",
		//			subName: "Create a New User with in multiple organizations; User on Principal is a SuperAdmin with raw query param",
		//			fields: fields{
		//				Config: &chronograf.Config{
		//					Auth: chronograf.AuthConfig{
		//						SuperAdminNewUsers: true,
		//					},
		//				},
		//				Organizations: []chronograf.Organization{
		//					{
		//						ID:          "1",
		//						Name:        "cool",
		//						DefaultRole: roles.ViewerRoleName,
		//					},
		//				},
		//				Users: []chronograf.User{
		//					{
		//						ID:         1, // This is artificial, but should be reflective of the users actual ID
		//						Name:       "billibob",
		//						Provider:   "github",
		//						Scheme:     "oauth2",
		//						SuperAdmin: true,
		//						Roles: []chronograf.Role{
		//							{
		//								Name:         "admin",
		//								Organization: "default",
		//							},
		//						},
		//					},
		//				},
		//			},
		//			args: args{
		//				server: &server.Server{
		//					GithubClientID:     "not empty",
		//					GithubClientSecret: "not empty",
		//				},
		//				method: "POST",
		//				path:   "/chronograf/v1/users",
		//				payload: &chronograf.User{
		//					Name:     "user",
		//					Provider: "provider",
		//					Scheme:   "oauth2",
		//					Roles: []chronograf.Role{
		//						{
		//							Name:         roles.EditorRoleName,
		//							Organization: "default",
		//						},
		//						{
		//							Name:         roles.EditorRoleName,
		//							Organization: "1",
		//						},
		//					},
		//				},
		//				principal: oauth2.Principal{
		//					Organization: "default",
		//					Subject:      "billibob",
		//					Issuer:       "github",
		//				},
		//			},
		//			wants: wants{
		//				statusCode: 201,
		//				body: `
		//{
		//  "links": {
		//    "self": "/chronograf/v1/users/2"
		//  },
		//  "id": "2",
		//  "name": "user",
		//  "provider": "provider",
		//  "scheme": "oauth2",
		//  "superAdmin": true,
		//  "roles": [
		//    {
		//      "name": "editor",
		//      "organization": "default"
		//    },
		//    {
		//      "name": "editor",
		//      "organization": "1"
		//    }
		//  ]
		//}`,
		//			},
		//		},
		//		{
		//			name:    "PATCH /users",
		//			subName: "Update user to have no roles",
		//			fields: fields{
		//				Config: &chronograf.Config{
		//					Auth: chronograf.AuthConfig{
		//						SuperAdminNewUsers: true,
		//					},
		//				},
		//				Organizations: []chronograf.Organization{
		//					{
		//						ID:          "1",
		//						Name:        "cool",
		//						DefaultRole: roles.ViewerRoleName,
		//					},
		//				},
		//				Users: []chronograf.User{
		//					{
		//						ID:         1, // This is artificial, but should be reflective of the users actual ID
		//						Name:       "billibob",
		//						Provider:   "github",
		//						Scheme:     "oauth2",
		//						SuperAdmin: true,
		//						Roles: []chronograf.Role{
		//							{
		//								Name:         "admin",
		//								Organization: "default",
		//							},
		//						},
		//					},
		//				},
		//			},
		//			args: args{
		//				server: &server.Server{
		//					GithubClientID:     "not empty",
		//					GithubClientSecret: "not empty",
		//				},
		//				method: "PATCH",
		//				path:   "/chronograf/v1/users/1",
		//				payload: map[string]interface{}{
		//					"name":       "billibob",
		//					"provider":   "github",
		//					"scheme":     "oauth2",
		//					"superAdmin": true,
		//					"roles":      []chronograf.Role{},
		//				},
		//				principal: oauth2.Principal{
		//					Organization: "default",
		//					Subject:      "billibob",
		//					Issuer:       "github",
		//				},
		//			},
		//			wants: wants{
		//				statusCode: 200,
		//				body: `
		//{
		//  "links": {
		//    "self": "/chronograf/v1/users/1"
		//  },
		//  "id": "1",
		//  "name": "billibob",
		//  "provider": "github",
		//  "scheme": "oauth2",
		//  "superAdmin": true,
		//  "roles": [
		//  ]
		//}`,
		//			},
		//		},
		//		{
		//			name:    "PATCH /users",
		//			subName: "Update user roles with wildcard",
		//			fields: fields{
		//				Config: &chronograf.Config{
		//					Auth: chronograf.AuthConfig{
		//						SuperAdminNewUsers: true,
		//					},
		//				},
		//				Organizations: []chronograf.Organization{
		//					{
		//						ID:          "1",
		//						Name:        "cool",
		//						DefaultRole: roles.ViewerRoleName,
		//					},
		//				},
		//				Users: []chronograf.User{
		//					{
		//						ID:         1, // This is artificial, but should be reflective of the users actual ID
		//						Name:       "billibob",
		//						Provider:   "github",
		//						Scheme:     "oauth2",
		//						SuperAdmin: true,
		//						Roles: []chronograf.Role{
		//							{
		//								Name:         "admin",
		//								Organization: "default",
		//							},
		//						},
		//					},
		//				},
		//			},
		//			args: args{
		//				server: &server.Server{
		//					GithubClientID:     "not empty",
		//					GithubClientSecret: "not empty",
		//				},
		//				method: "PATCH",
		//				path:   "/chronograf/v1/users/1",
		//				payload: &chronograf.User{
		//					Name:       "billibob",
		//					Provider:   "github",
		//					Scheme:     "oauth2",
		//					SuperAdmin: true,
		//					Roles: []chronograf.Role{
		//						{
		//							Name:         roles.AdminRoleName,
		//							Organization: "default",
		//						},
		//						{
		//							Name:         roles.WildcardRoleName,
		//							Organization: "1",
		//						},
		//					},
		//				},
		//				principal: oauth2.Principal{
		//					Organization: "default",
		//					Subject:      "billibob",
		//					Issuer:       "github",
		//				},
		//			},
		//			wants: wants{
		//				statusCode: 200,
		//				body: `
		//{
		//  "links": {
		//    "self": "/chronograf/v1/users/1"
		//  },
		//  "id": "1",
		//  "name": "billibob",
		//  "provider": "github",
		//  "scheme": "oauth2",
		//  "superAdmin": true,
		//  "roles": [
		//    {
		//      "name": "admin",
		//      "organization": "default"
		//    },
		//    {
		//      "name": "viewer",
		//      "organization": "1"
		//    }
		//  ]
		//}`,
		//			},
		//		},
		//		{
		//			name:    "PATCH /users/1",
		//			subName: "SuperAdmin modifying their own status",
		//			fields: fields{
		//				Users: []chronograf.User{
		//					{
		//						ID:         1, // This is artificial, but should be reflective of the users actual ID
		//						Name:       "billibob",
		//						Provider:   "github",
		//						Scheme:     "oauth2",
		//						SuperAdmin: true,
		//						Roles: []chronograf.Role{
		//							{
		//								Name:         "admin",
		//								Organization: "default",
		//							},
		//						},
		//					},
		//				},
		//			},
		//			args: args{
		//				server: &server.Server{
		//					GithubClientID:     "not empty",
		//					GithubClientSecret: "not empty",
		//				},
		//				method: "PATCH",
		//				path:   "/chronograf/v1/organizations/default/users/1",
		//				payload: map[string]interface{}{
		//					"id":         "1",
		//					"superAdmin": false,
		//					"roles": []interface{}{
		//						map[string]interface{}{
		//							"name":         "admin",
		//							"organization": "default",
		//						},
		//					},
		//				},
		//				principal: oauth2.Principal{
		//					Organization: "default",
		//					Subject:      "billibob",
		//					Issuer:       "github",
		//				},
		//			},
		//			wants: wants{
		//				statusCode: http.StatusUnauthorized,
		//				body: `
		//{
		//  "code": 401,
		//  "message": "user cannot modify their own SuperAdmin status"
		//}
		//`,
		//			},
		//		},
		//		{
		//			name:    "GET /organization/default/users",
		//			subName: "Organization not set explicitly on principal",
		//			fields: fields{
		//				Config: &chronograf.Config{
		//					Auth: chronograf.AuthConfig{
		//						SuperAdminNewUsers: false,
		//					},
		//				},
		//				Organizations: []chronograf.Organization{},
		//				Users: []chronograf.User{
		//					{
		//						ID:         1, // This is artificial, but should be reflective of the users actual ID
		//						Name:       "billibob",
		//						Provider:   "github",
		//						Scheme:     "oauth2",
		//						SuperAdmin: true,
		//						Roles: []chronograf.Role{
		//							{
		//								Name:         "admin",
		//								Organization: "default",
		//							},
		//						},
		//					},
		//				},
		//			},
		//			args: args{
		//				server: &server.Server{
		//					GithubClientID:     "not empty",
		//					GithubClientSecret: "not empty",
		//				},
		//				method: "GET",
		//				path:   "/chronograf/v1/organizations/default/users",
		//				principal: oauth2.Principal{
		//					Organization: "",
		//					Subject:      "billibob",
		//					Issuer:       "github",
		//				},
		//			},
		//			wants: wants{
		//				statusCode: 200,
		//				body: `
		//{
		//  "links": {
		//    "self": "/chronograf/v1/organizations/default/users"
		//  },
		//  "users": [
		//    {
		//      "links": {
		//        "self": "/chronograf/v1/organizations/default/users/1"
		//      },
		//      "id": "1",
		//      "name": "billibob",
		//      "provider": "github",
		//      "scheme": "oauth2",
		//      "superAdmin": true,
		//      "roles": [
		//        {
		//          "name": "admin",
		//          "organization": "default"
		//        }
		//      ]
		//    }
		//  ]
		//}
		//`,
		//			},
		//		},
		//		{
		//			name:    "PUT /me",
		//			subName: "Change SuperAdmins current organization to org they dont belong to",
		//			fields: fields{
		//				Config: &chronograf.Config{
		//					Auth: chronograf.AuthConfig{
		//						SuperAdminNewUsers: false,
		//					},
		//				},
		//				Organizations: []chronograf.Organization{
		//					{
		//						ID:          "1",
		//						Name:        "Sweet",
		//						DefaultRole: roles.ViewerRoleName,
		//					},
		//				},
		//				Users: []chronograf.User{
		//					{
		//						ID:         1, // This is artificial, but should be reflective of the users actual ID
		//						Name:       "billibob",
		//						Provider:   "github",
		//						Scheme:     "oauth2",
		//						SuperAdmin: true,
		//						Roles: []chronograf.Role{
		//							{
		//								Name:         "admin",
		//								Organization: "default",
		//							},
		//						},
		//					},
		//				},
		//			},
		//			args: args{
		//				server: &server.Server{
		//					GithubClientID:     "not empty",
		//					GithubClientSecret: "not empty",
		//				},
		//				method: "PUT",
		//				path:   "/chronograf/v1/me",
		//				payload: map[string]string{
		//					"organization": "1",
		//				},
		//				principal: oauth2.Principal{
		//					Organization: "default",
		//					Subject:      "billibob",
		//					Issuer:       "github",
		//				},
		//			},
		//			wants: wants{
		//				statusCode: 200,
		//				body: `
		//{
		//  "id": "1",
		//  "name": "billibob",
		//  "roles": [
		//    {
		//      "name": "admin",
		//      "organization": "default"
		//    },
		//    {
		//      "name": "viewer",
		//      "organization": "1"
		//    }
		//  ],
		//  "provider": "github",
		//  "scheme": "oauth2",
		//  "superAdmin": true,
		//  "links": {
		//    "self": "/chronograf/v1/organizations/1/users/1"
		//  },
		//  "organizations": [
		//      {
		//        "id": "1",
		//        "name": "Sweet",
		//        "defaultRole": "viewer"
		//      },
		//      {
		//        "id": "default",
		//        "name": "Default",
		//        "defaultRole": "member"
		//      }
		//  ],
		//  "currentOrganization": {
		//    "id": "1",
		//    "name": "Sweet",
		//    "defaultRole": "viewer"
		//  }
		//}`,
		//			},
		//		},
		//		{
		//			name:    "PUT /me",
		//			subName: "Change Admin current organization to org they dont belong to",
		//			fields: fields{
		//				Config: &chronograf.Config{
		//					Auth: chronograf.AuthConfig{
		//						SuperAdminNewUsers: false,
		//					},
		//				},
		//				Organizations: []chronograf.Organization{
		//					{
		//						ID:          "1",
		//						Name:        "Sweet",
		//						DefaultRole: roles.ViewerRoleName,
		//					},
		//				},
		//				Users: []chronograf.User{
		//					{
		//						ID:         1, // This is artificial, but should be reflective of the users actual ID
		//						Name:       "billibob",
		//						Provider:   "github",
		//						Scheme:     "oauth2",
		//						SuperAdmin: false,
		//						Roles: []chronograf.Role{
		//							{
		//								Name:         "admin",
		//								Organization: "default",
		//							},
		//						},
		//					},
		//				},
		//			},
		//			args: args{
		//				server: &server.Server{
		//					GithubClientID:     "not empty",
		//					GithubClientSecret: "not empty",
		//				},
		//				method: "PUT",
		//				path:   "/chronograf/v1/me",
		//				payload: map[string]string{
		//					"organization": "1",
		//				},
		//				principal: oauth2.Principal{
		//					Organization: "default",
		//					Subject:      "billibob",
		//					Issuer:       "github",
		//				},
		//			},
		//			wants: wants{
		//				statusCode: 403,
		//				body: `
		//        {
		//  "code": 403,
		//  "message": "user not found"
		//}`,
		//			},
		//		},
		//		{
		//			name:    "GET /me",
		//			subName: "New user hits me for the first time",
		//			fields: fields{
		//				Config: &chronograf.Config{
		//					Auth: chronograf.AuthConfig{
		//						SuperAdminNewUsers: false,
		//					},
		//				},
		//				Mappings: []chronograf.Mapping{
		//					{
		//						ID:                   "1",
		//						Organization:         "1",
		//						Provider:             "*",
		//						Scheme:               "*",
		//						ProviderOrganization: "influxdata",
		//					},
		//					{
		//						ID:                   "1",
		//						Organization:         "1",
		//						Provider:             "*",
		//						Scheme:               "*",
		//						ProviderOrganization: "*",
		//					},
		//					{
		//						ID:                   "2",
		//						Organization:         "2",
		//						Provider:             "github",
		//						Scheme:               "*",
		//						ProviderOrganization: "*",
		//					},
		//					{
		//						ID:                   "3",
		//						Organization:         "3",
		//						Provider:             "auth0",
		//						Scheme:               "ldap",
		//						ProviderOrganization: "*",
		//					},
		//				},
		//				Organizations: []chronograf.Organization{
		//					{
		//						ID:          "1",
		//						Name:        "Sweet",
		//						DefaultRole: roles.ViewerRoleName,
		//					},
		//					{
		//						ID:          "2",
		//						Name:        "What",
		//						DefaultRole: roles.EditorRoleName,
		//					},
		//					{
		//						ID:          "3",
		//						Name:        "Okay",
		//						DefaultRole: roles.AdminRoleName,
		//					},
		//				},
		//				Users: []chronograf.User{
		//					{
		//						ID:         1, // This is artificial, but should be reflective of the users actual ID
		//						Name:       "billibob",
		//						Provider:   "github",
		//						Scheme:     "oauth2",
		//						SuperAdmin: true,
		//						Roles:      []chronograf.Role{},
		//					},
		//				},
		//			},
		//			args: args{
		//				server: &server.Server{
		//					GithubClientID:     "not empty",
		//					GithubClientSecret: "not empty",
		//				},
		//				method: "GET",
		//				path:   "/chronograf/v1/me",
		//				principal: oauth2.Principal{
		//					Subject: "billietta",
		//					Issuer:  "github",
		//					Group:   "influxdata,idk,mimi",
		//				},
		//			},
		//			wants: wants{
		//				statusCode: 200,
		//				body: `
		//{
		//  "id": "2",
		//  "name": "billietta",
		//  "roles": [
		//    {
		//      "name": "viewer",
		//      "organization": "1"
		//    },
		//    {
		//      "name": "editor",
		//      "organization": "2"
		//    },
		//    {
		//      "name": "member",
		//      "organization": "default"
		//    }
		//  ],
		//  "provider": "github",
		//  "scheme": "oauth2",
		//  "links": {
		//    "self": "/chronograf/v1/organizations/default/users/2"
		//  },
		//  "organizations": [
		//    {
		//      "id": "1",
		//      "name": "Sweet",
		//      "defaultRole": "viewer"
		//    },
		//    {
		//      "id": "2",
		//      "name": "What",
		//      "defaultRole": "editor"
		//    },
		//    {
		//      "id": "default",
		//      "name": "Default",
		//      "defaultRole": "member"
		//    }
		//  ],
		//  "currentOrganization": {
		//    "id": "default",
		//    "name": "Default",
		//    "defaultRole": "member"
		//  }
		//}
		//`,
		//			},
		//		},
		//		{
		//			name:    "GET /mappings",
		//			subName: "get all mappings",
		//			fields: fields{
		//				Config: &chronograf.Config{
		//					Auth: chronograf.AuthConfig{
		//						SuperAdminNewUsers: false,
		//					},
		//				},
		//				Mappings: []chronograf.Mapping{
		//					{
		//						ID:                   "1",
		//						Organization:         "1",
		//						Provider:             "*",
		//						Scheme:               "*",
		//						ProviderOrganization: "influxdata",
		//					},
		//					{
		//						ID:                   "1",
		//						Organization:         "1",
		//						Provider:             "*",
		//						Scheme:               "*",
		//						ProviderOrganization: "*",
		//					},
		//					{
		//						ID:                   "2",
		//						Organization:         "2",
		//						Provider:             "github",
		//						Scheme:               "*",
		//						ProviderOrganization: "*",
		//					},
		//					{
		//						ID:                   "3",
		//						Organization:         "3",
		//						Provider:             "auth0",
		//						Scheme:               "ldap",
		//						ProviderOrganization: "*",
		//					},
		//				},
		//				Organizations: []chronograf.Organization{
		//					{
		//						ID:          "1",
		//						Name:        "Sweet",
		//						DefaultRole: roles.ViewerRoleName,
		//					},
		//					{
		//						ID:          "2",
		//						Name:        "What",
		//						DefaultRole: roles.EditorRoleName,
		//					},
		//					{
		//						ID:          "3",
		//						Name:        "Okay",
		//						DefaultRole: roles.AdminRoleName,
		//					},
		//				},
		//				Users: []chronograf.User{
		//					{
		//						ID:         1, // This is artificial, but should be reflective of the users actual ID
		//						Name:       "billibob",
		//						Provider:   "github",
		//						Scheme:     "oauth2",
		//						SuperAdmin: true,
		//					},
		//				},
		//			},
		//			args: args{
		//				server: &server.Server{
		//					GithubClientID:     "not empty",
		//					GithubClientSecret: "not empty",
		//				},
		//				method: "GET",
		//				path:   "/chronograf/v1/mappings",
		//				principal: oauth2.Principal{
		//					Subject: "billibob",
		//					Issuer:  "github",
		//					Group:   "influxdata,idk,mimi",
		//				},
		//			},
		//			wants: wants{
		//				statusCode: 200,
		//				body: `
		//{
		//  "links": {
		//    "self": "/chronograf/v1/mappings"
		//  },
		//  "mappings": [
		//    {
		//      "links": {
		//        "self": "/chronograf/v1/mappings/1"
		//      },
		//      "id": "1",
		//      "organizationId": "1",
		//      "provider": "*",
		//      "scheme": "*",
		//      "providerOrganization": "influxdata"
		//    },
		//    {
		//      "links": {
		//        "self": "/chronograf/v1/mappings/2"
		//      },
		//      "id": "2",
		//      "organizationId": "1",
		//      "provider": "*",
		//      "scheme": "*",
		//      "providerOrganization": "*"
		//    },
		//    {
		//      "links": {
		//        "self": "/chronograf/v1/mappings/3"
		//      },
		//      "id": "3",
		//      "organizationId": "2",
		//      "provider": "github",
		//      "scheme": "*",
		//      "providerOrganization": "*"
		//    },
		//    {
		//      "links": {
		//        "self": "/chronograf/v1/mappings/4"
		//      },
		//      "id": "4",
		//      "organizationId": "3",
		//      "provider": "auth0",
		//      "scheme": "ldap",
		//      "providerOrganization": "*"
		//    },
		//    {
		//      "links": {
		//        "self": "/chronograf/v1/mappings/default"
		//      },
		//      "id": "default",
		//      "organizationId": "default",
		//      "provider": "*",
		//      "scheme": "*",
		//      "providerOrganization": "*"
		//    }
		//  ]
		//}
		//`,
		//			},
		//		},
		//		{
		//			name:    "GET /mappings",
		//			subName: "get all mappings - user is not super admin",
		//			fields: fields{
		//				Config: &chronograf.Config{
		//					Auth: chronograf.AuthConfig{
		//						SuperAdminNewUsers: false,
		//					},
		//				},
		//				Mappings: []chronograf.Mapping{
		//					{
		//						ID:                   "1",
		//						Organization:         "1",
		//						Provider:             "*",
		//						Scheme:               "*",
		//						ProviderOrganization: "influxdata",
		//					},
		//					{
		//						ID:                   "1",
		//						Organization:         "1",
		//						Provider:             "*",
		//						Scheme:               "*",
		//						ProviderOrganization: "*",
		//					},
		//					{
		//						ID:                   "2",
		//						Organization:         "2",
		//						Provider:             "github",
		//						Scheme:               "*",
		//						ProviderOrganization: "*",
		//					},
		//					{
		//						ID:                   "3",
		//						Organization:         "3",
		//						Provider:             "auth0",
		//						Scheme:               "ldap",
		//						ProviderOrganization: "*",
		//					},
		//				},
		//				Organizations: []chronograf.Organization{
		//					{
		//						ID:          "1",
		//						Name:        "Sweet",
		//						DefaultRole: roles.ViewerRoleName,
		//					},
		//					{
		//						ID:          "2",
		//						Name:        "What",
		//						DefaultRole: roles.EditorRoleName,
		//					},
		//					{
		//						ID:          "3",
		//						Name:        "Okay",
		//						DefaultRole: roles.AdminRoleName,
		//					},
		//				},
		//				Users: []chronograf.User{
		//					{
		//						ID:         1, // This is artificial, but should be reflective of the users actual ID
		//						Name:       "billibob",
		//						Provider:   "github",
		//						Scheme:     "oauth2",
		//						SuperAdmin: false,
		//					},
		//				},
		//			},
		//			args: args{
		//				server: &server.Server{
		//					GithubClientID:     "not empty",
		//					GithubClientSecret: "not empty",
		//				},
		//				method: "GET",
		//				path:   "/chronograf/v1/mappings",
		//				principal: oauth2.Principal{
		//					Subject: "billibob",
		//					Issuer:  "github",
		//					Group:   "influxdata,idk,mimi",
		//				},
		//			},
		//			wants: wants{
		//				statusCode: 403,
		//				body: `
		//{
		//  "code": 403,
		//  "message": "User is not authorized"
		//}
		//`,
		//			},
		//		},
		//		{
		//			name:    "POST /mappings",
		//			subName: "create new mapping",
		//			fields: fields{
		//				Config: &chronograf.Config{
		//					Auth: chronograf.AuthConfig{
		//						SuperAdminNewUsers: false,
		//					},
		//				},
		//				Mappings: []chronograf.Mapping{},
		//				Organizations: []chronograf.Organization{
		//					{
		//						ID:          "1",
		//						Name:        "Sweet",
		//						DefaultRole: roles.ViewerRoleName,
		//					},
		//				},
		//				Users: []chronograf.User{
		//					{
		//						ID:         1, // This is artificial, but should be reflective of the users actual ID
		//						Name:       "billibob",
		//						Provider:   "github",
		//						Scheme:     "oauth2",
		//						SuperAdmin: true,
		//					},
		//				},
		//			},
		//			args: args{
		//				server: &server.Server{
		//					GithubClientID:     "not empty",
		//					GithubClientSecret: "not empty",
		//				},
		//				method: "POST",
		//				path:   "/chronograf/v1/mappings",
		//				payload: &chronograf.Mapping{
		//					ID:                   "1",
		//					Organization:         "1",
		//					Provider:             "*",
		//					Scheme:               "*",
		//					ProviderOrganization: "influxdata",
		//				},
		//				principal: oauth2.Principal{
		//					Subject: "billibob",
		//					Issuer:  "github",
		//					Group:   "influxdata,idk,mimi",
		//				},
		//			},
		//			wants: wants{
		//				statusCode: 201,
		//				body: `
		//{
		//  "links": {
		//    "self": "/chronograf/v1/mappings/1"
		//  },
		//  "id": "1",
		//  "organizationId": "1",
		//  "provider": "*",
		//  "scheme": "*",
		//  "providerOrganization": "influxdata"
		//}
		//`,
		//			},
		//		},
		//		{
		//			name:    "PUT /mappings",
		//			subName: "update new mapping",
		//			fields: fields{
		//				Config: &chronograf.Config{
		//					Auth: chronograf.AuthConfig{
		//						SuperAdminNewUsers: false,
		//					},
		//				},
		//				Mappings: []chronograf.Mapping{
		//					chronograf.Mapping{
		//						ID:                   "1",
		//						Organization:         "1",
		//						Provider:             "*",
		//						Scheme:               "*",
		//						ProviderOrganization: "influxdata",
		//					},
		//				},
		//				Organizations: []chronograf.Organization{
		//					{
		//						ID:          "1",
		//						Name:        "Sweet",
		//						DefaultRole: roles.ViewerRoleName,
		//					},
		//				},
		//				Users: []chronograf.User{
		//					{
		//						ID:         1, // This is artificial, but should be reflective of the users actual ID
		//						Name:       "billibob",
		//						Provider:   "github",
		//						Scheme:     "oauth2",
		//						SuperAdmin: true,
		//					},
		//				},
		//			},
		//			args: args{
		//				server: &server.Server{
		//					GithubClientID:     "not empty",
		//					GithubClientSecret: "not empty",
		//				},
		//				method: "PUT",
		//				path:   "/chronograf/v1/mappings/1",
		//				payload: &chronograf.Mapping{
		//					ID:                   "1",
		//					Organization:         "1",
		//					Provider:             "*",
		//					Scheme:               "*",
		//					ProviderOrganization: "*",
		//				},
		//				principal: oauth2.Principal{
		//					Subject: "billibob",
		//					Issuer:  "github",
		//					Group:   "influxdata,idk,mimi",
		//				},
		//			},
		//			wants: wants{
		//				statusCode: 200,
		//				body: `
		//{
		//  "links": {
		//    "self": "/chronograf/v1/mappings/1"
		//  },
		//  "id": "1",
		//  "organizationId": "1",
		//  "provider": "*",
		//  "scheme": "*",
		//  "providerOrganization": "*"
		//}
		//`,
		//			},
		//		},
		//		{
		//			name:    "GET /org_config",
		//			subName: "default org",
		//			fields: fields{
		//				Users: []chronograf.User{
		//					{
		//						ID:         1, // This is artificial, but should be reflective of the users actual ID
		//						Name:       "billibob",
		//						Provider:   "github",
		//						Scheme:     "oauth2",
		//						SuperAdmin: true,
		//						Roles: []chronograf.Role{
		//							{
		//								Name:         "admin",
		//								Organization: "default",
		//							},
		//						},
		//					},
		//				},
		//			},
		//			args: args{
		//				server: &server.Server{
		//					GithubClientID:     "not empty",
		//					GithubClientSecret: "not empty",
		//				},
		//				method: "GET",
		//				path:   "/chronograf/v1/org_config",
		//				principal: oauth2.Principal{
		//					Organization: "default",
		//					Subject:      "billibob",
		//					Issuer:       "github",
		//				},
		//			},
		//			wants: wants{
		//				statusCode: 200,
		//				body: `
		//			{
		//				"links": {
		//					"self": "\/chronograf\/v1\/org_config",
		//					"logViewer": "\/chronograf\/v1\/org_config\/logviewer"
		//				},
		//				"organization": "default",
		//				"logViewer": {
		//					"columns": [
		//						{
		//							"name": "time",
		//							"position": 0,
		//							"encodings": [
		//								{
		//									"type": "visibility",
		//									"value": "hidden"
		//								}
		//							]
		//						},
		//						{
		//							"name": "severity",
		//							"position": 1,
		//							"encodings": [
		//								{
		//									"type": "visibility",
		//									"value": "visible"
		//								},
		//								{
		//									"type": "label",
		//									"value": "icon"
		//								},
		//								{
		//									"type": "label",
		//									"value": "text"
		//								},
		//								{
		//									"type": "color",
		//									"value": "ruby",
		//									"name": "emerg"
		//								},
		//								{
		//									"type": "color",
		//									"value": "fire",
		//									"name": "alert"
		//								},
		//								{
		//									"type": "color",
		//									"value": "curacao",
		//									"name": "crit"
		//								},
		//								{
		//									"type": "color",
		//									"value": "tiger",
		//									"name": "err"
		//								},
		//								{
		//									"type": "color",
		//									"value": "pineapple",
		//									"name": "warning"
		//								},
		//								{
		//									"type": "color",
		//									"value": "rainforest",
		//									"name": "notice"
		//								},
		//								{
		//									"type": "color",
		//									"value": "star",
		//									"name": "info"
		//								},
		//								{
		//									"type": "color",
		//									"value": "wolf",
		//									"name": "debug"
		//								}
		//							]
		//						},
		//						{
		//							"name": "timestamp",
		//							"position": 2,
		//							"encodings": [
		//								{
		//									"type": "visibility",
		//									"value": "visible"
		//								}
		//							]
		//						},
		//						{
		//							"name": "message",
		//							"position": 3,
		//							"encodings": [
		//								{
		//									"type": "visibility",
		//									"value": "visible"
		//								}
		//							]
		//						},
		//						{
		//							"name": "facility",
		//							"position": 4,
		//							"encodings": [
		//								{
		//									"type": "visibility",
		//									"value": "visible"
		//								}
		//							]
		//						},
		//						{
		//							"name": "procid",
		//							"position": 5,
		//							"encodings": [
		//								{
		//									"type": "visibility",
		//									"value": "visible"
		//								},
		//								{
		//									"type": "displayName",
		//									"value": "Proc ID"
		//								}
		//							]
		//						},
		//						{
		//							"name": "appname",
		//							"position": 6,
		//							"encodings": [
		//								{
		//									"type": "visibility",
		//									"value": "visible"
		//								},
		//								{
		//									"type": "displayName",
		//									"value": "Application"
		//								}
		//							]
		//						},
		//						{
		//							"name": "host",
		//							"position": 7,
		//							"encodings": [
		//								{
		//									"type": "visibility",
		//									"value": "visible"
		//								}
		//							]
		//						}
		//					]
		//				}
		//			}
		//				`,
		//			},
		//		},
		//		{
		//			name:    "GET /org_config/logviewer",
		//			subName: "default org",
		//			fields: fields{
		//				Users: []chronograf.User{
		//					{
		//						ID:         1, // This is artificial, but should be reflective of the users actual ID
		//						Name:       "billibob",
		//						Provider:   "github",
		//						Scheme:     "oauth2",
		//						SuperAdmin: true,
		//						Roles: []chronograf.Role{
		//							{
		//								Name:         "admin",
		//								Organization: "default",
		//							},
		//						},
		//					},
		//				},
		//			},
		//			args: args{
		//				server: &server.Server{
		//					GithubClientID:     "not empty",
		//					GithubClientSecret: "not empty",
		//				},
		//				method: "GET",
		//				path:   "/chronograf/v1/org_config/logviewer",
		//				principal: oauth2.Principal{
		//					Organization: "default",
		//					Subject:      "billibob",
		//					Issuer:       "github",
		//				},
		//			},
		//			wants: wants{
		//				statusCode: 200,
		//				body: `
		//			{
		//				"links": {
		//					"self": "\/chronograf\/v1\/org_config/logviewer"
		//				},
		//				"columns": [
		//					{
		//						"name": "time",
		//						"position": 0,
		//						"encodings": [
		//							{
		//								"type": "visibility",
		//								"value": "hidden"
		//							}
		//						]
		//					},
		//					{
		//						"name": "severity",
		//						"position": 1,
		//						"encodings": [
		//							{
		//								"type": "visibility",
		//								"value": "visible"
		//							},
		//							{
		//								"type": "label",
		//								"value": "icon"
		//							},
		//							{
		//								"type": "label",
		//								"value": "text"
		//							},
		//							{
		//								"type": "color",
		//								"value": "ruby",
		//								"name": "emerg"
		//							},
		//							{
		//								"type": "color",
		//								"value": "fire",
		//								"name": "alert"
		//							},
		//							{
		//								"type": "color",
		//								"value": "curacao",
		//								"name": "crit"
		//							},
		//							{
		//								"type": "color",
		//								"value": "tiger",
		//								"name": "err"
		//							},
		//							{
		//								"type": "color",
		//								"value": "pineapple",
		//								"name": "warning"
		//							},
		//							{
		//								"type": "color",
		//								"value": "rainforest",
		//								"name": "notice"
		//							},
		//							{
		//								"type": "color",
		//								"value": "star",
		//								"name": "info"
		//							},
		//							{
		//								"type": "color",
		//								"value": "wolf",
		//								"name": "debug"
		//							}
		//						]
		//					},
		//					{
		//						"name": "timestamp",
		//						"position": 2,
		//						"encodings": [
		//							{
		//								"type": "visibility",
		//								"value": "visible"
		//							}
		//						]
		//					},
		//					{
		//						"name": "message",
		//						"position": 3,
		//						"encodings": [
		//							{
		//								"type": "visibility",
		//								"value": "visible"
		//							}
		//						]
		//					},
		//					{
		//						"name": "facility",
		//						"position": 4,
		//						"encodings": [
		//							{
		//								"type": "visibility",
		//								"value": "visible"
		//							}
		//						]
		//					},
		//					{
		//						"name": "procid",
		//						"position": 5,
		//						"encodings": [
		//							{
		//								"type": "visibility",
		//								"value": "visible"
		//							},
		//							{
		//								"type": "displayName",
		//								"value": "Proc ID"
		//							}
		//						]
		//					},
		//					{
		//						"name": "appname",
		//						"position": 6,
		//						"encodings": [
		//							{
		//								"type": "visibility",
		//								"value": "visible"
		//							},
		//							{
		//								"type": "displayName",
		//								"value": "Application"
		//							}
		//						]
		//					},
		//					{
		//						"name": "host",
		//						"position": 7,
		//						"encodings": [
		//							{
		//								"type": "visibility",
		//								"value": "visible"
		//							}
		//						]
		//					}
		//				]
		//			}
		//				`,
		//			},
		//		},
		//		{
		//			name:    "PUT /org_config/logviewer",
		//			subName: "default org",
		//			fields: fields{
		//				Config: &chronograf.Config{
		//					Auth: chronograf.AuthConfig{
		//						SuperAdminNewUsers: true,
		//					},
		//				},
		//				Organizations: []chronograf.Organization{
		//					{
		//						ID:          "1",
		//						Name:        "cool",
		//						DefaultRole: roles.ViewerRoleName,
		//					},
		//				},
		//				Users: []chronograf.User{
		//					{
		//						ID:         1, // This is artificial, but should be reflective of the users actual ID
		//						Name:       "billibob",
		//						Provider:   "github",
		//						Scheme:     "oauth2",
		//						SuperAdmin: true,
		//						Roles: []chronograf.Role{
		//							{
		//								Name:         "admin",
		//								Organization: "default",
		//							},
		//						},
		//					},
		//				},
		//			},
		//			args: args{
		//				server: &server.Server{
		//					GithubClientID:     "not empty",
		//					GithubClientSecret: "not empty",
		//				},
		//				method: "PUT",
		//				path:   "/chronograf/v1/org_config/logviewer",
		//				payload: &chronograf.LogViewerConfig{
		//					Columns: []chronograf.LogViewerColumn{
		//						{
		//							Name:     "time",
		//							Position: 0,
		//							Encodings: []chronograf.ColumnEncoding{
		//								{
		//									Type:  "visibility",
		//									Value: "hidden",
		//								},
		//							},
		//						},
		//						{
		//							Name:     "severity",
		//							Position: 1,
		//							Encodings: []chronograf.ColumnEncoding{
		//
		//								{
		//									Type:  "visibility",
		//									Value: "visible",
		//								},
		//								{
		//									Type:  "label",
		//									Value: "icon",
		//								},
		//								{
		//									Type:  "color",
		//									Name:  "emerg",
		//									Value: "ruby",
		//								},
		//								{
		//									Type:  "color",
		//									Name:  "alert",
		//									Value: "fire",
		//								},
		//								{
		//									Type:  "color",
		//									Name:  "crit",
		//									Value: "curacao",
		//								},
		//								{
		//									Type:  "color",
		//									Name:  "err",
		//									Value: "tiger",
		//								},
		//								{
		//									Type:  "color",
		//									Name:  "warning",
		//									Value: "pineapple",
		//								},
		//								{
		//									Type:  "color",
		//									Name:  "notice",
		//									Value: "wolf",
		//								},
		//								{
		//									Type:  "color",
		//									Name:  "info",
		//									Value: "wolf",
		//								},
		//								{
		//									Type:  "color",
		//									Name:  "debug",
		//									Value: "wolf",
		//								},
		//							},
		//						},
		//						{
		//							Name:     "timestamp",
		//							Position: 3,
		//							Encodings: []chronograf.ColumnEncoding{
		//
		//								{
		//									Type:  "visibility",
		//									Value: "visible",
		//								},
		//							},
		//						},
		//						{
		//							Name:     "message",
		//							Position: 2,
		//							Encodings: []chronograf.ColumnEncoding{
		//
		//								{
		//									Type:  "visibility",
		//									Value: "visible",
		//								},
		//							},
		//						},
		//						{
		//							Name:     "facility",
		//							Position: 4,
		//							Encodings: []chronograf.ColumnEncoding{
		//
		//								{
		//									Type:  "visibility",
		//									Value: "visible",
		//								},
		//							},
		//						},
		//						{
		//							Name:     "procid",
		//							Position: 5,
		//							Encodings: []chronograf.ColumnEncoding{
		//
		//								{
		//									Type:  "visibility",
		//									Value: "hidden",
		//								},
		//								{
		//									Type:  "displayName",
		//									Value: "ProcID!",
		//								},
		//							},
		//						},
		//						{
		//							Name:     "appname",
		//							Position: 6,
		//							Encodings: []chronograf.ColumnEncoding{
		//								{
		//									Type:  "visibility",
		//									Value: "visible",
		//								},
		//								{
		//									Type:  "displayName",
		//									Value: "Application",
		//								},
		//							},
		//						},
		//						{
		//							Name:     "host",
		//							Position: 7,
		//							Encodings: []chronograf.ColumnEncoding{
		//								{
		//									Type:  "visibility",
		//									Value: "visible",
		//								},
		//							},
		//						},
		//					},
		//				},
		//				principal: oauth2.Principal{
		//					Organization: "default",
		//					Subject:      "billibob",
		//					Issuer:       "github",
		//				},
		//			},
		//			wants: wants{
		//				statusCode: 200,
		//				body: `
		//			{
		//				"links": {
		//					"self": "\/chronograf\/v1\/org_config\/logviewer"
		//				},
		//				"columns": [
		//					{
		//						"name": "time",
		//						"position": 0,
		//						"encodings": [
		//							{
		//								"type": "visibility",
		//								"value": "hidden"
		//							}
		//						]
		//					},
		//					{
		//						"name": "severity",
		//						"position": 1,
		//						"encodings": [
		//							{
		//								"type": "visibility",
		//								"value": "visible"
		//							},
		//							{
		//								"type": "label",
		//								"value": "icon"
		//							},
		//							{
		//								"type": "color",
		//								"value": "ruby",
		//								"name": "emerg"
		//							},
		//							{
		//								"type": "color",
		//								"value": "fire",
		//								"name": "alert"
		//							},
		//							{
		//								"type": "color",
		//								"value": "curacao",
		//								"name": "crit"
		//							},
		//							{
		//								"type": "color",
		//								"value": "tiger",
		//								"name": "err"
		//							},
		//							{
		//								"type": "color",
		//								"value": "pineapple",
		//								"name": "warning"
		//							},
		//							{
		//								"type": "color",
		//								"value": "wolf",
		//								"name": "notice"
		//							},
		//							{
		//								"type": "color",
		//								"value": "wolf",
		//								"name": "info"
		//							},
		//							{
		//								"type": "color",
		//								"value": "wolf",
		//								"name": "debug"
		//							}
		//						]
		//					},
		//					{
		//						"name": "timestamp",
		//						"position": 3,
		//						"encodings": [
		//							{
		//								"type": "visibility",
		//								"value": "visible"
		//							}
		//						]
		//					},
		//					{
		//						"name": "message",
		//						"position": 2,
		//						"encodings": [
		//							{
		//								"type": "visibility",
		//								"value": "visible"
		//							}
		//						]
		//					},
		//					{
		//						"name": "facility",
		//						"position": 4,
		//						"encodings": [
		//							{
		//								"type": "visibility",
		//								"value": "visible"
		//							}
		//						]
		//					},
		//					{
		//						"name": "procid",
		//						"position": 5,
		//						"encodings": [
		//							{
		//								"type": "visibility",
		//								"value": "hidden"
		//							},
		//							{
		//								"type": "displayName",
		//								"value": "ProcID!"
		//							}
		//						]
		//					},
		//					{
		//						"name": "appname",
		//						"position": 6,
		//						"encodings": [
		//							{
		//								"type": "visibility",
		//								"value": "visible"
		//							},
		//							{
		//								"type": "displayName",
		//								"value": "Application"
		//							}
		//						]
		//					},
		//					{
		//						"name": "host",
		//						"position": 7,
		//						"encodings": [
		//							{
		//								"type": "visibility",
		//								"value": "visible"
		//							}
		//						]
		//					}
		//				]
		//			}
		//				`,
		//			},
		//		},
		//		{
		//			name:    "GET /",
		//			subName: "signed into default org",
		//			fields: fields{
		//				Config: &chronograf.Config{
		//					Auth: chronograf.AuthConfig{
		//						SuperAdminNewUsers: true,
		//					},
		//				},
		//				Organizations: []chronograf.Organization{
		//					{
		//						ID:          "1",
		//						Name:        "cool",
		//						DefaultRole: roles.ViewerRoleName,
		//					},
		//				},
		//				Users: []chronograf.User{
		//					{
		//						ID:         1, // This is artificial, but should be reflective of the users actual ID
		//						Name:       "billibob",
		//						Provider:   "github",
		//						Scheme:     "oauth2",
		//						SuperAdmin: true,
		//						Roles: []chronograf.Role{
		//							{
		//								Name:         "admin",
		//								Organization: "default",
		//							},
		//						},
		//					},
		//				},
		//			},
		//			args: args{
		//				server: &server.Server{
		//					GithubClientID:     "not empty",
		//					GithubClientSecret: "not empty",
		//				},
		//				method: "GET",
		//				path:   "/chronograf/v1/",
		//				principal: oauth2.Principal{
		//					Organization: "default",
		//					Subject:      "billibob",
		//					Issuer:       "github",
		//				},
		//			},
		//			wants: wants{
		//				statusCode: 200,
		//				body: `
		//{
		//  "layouts": "/chronograf/v1/layouts",
		//  "cells": "/chronograf/v2/cells",
		//  "users": "/chronograf/v1/organizations/default/users",
		//  "allUsers": "/chronograf/v1/users",
		//  "organizations": "/chronograf/v1/organizations",
		//  "mappings": "/chronograf/v1/mappings",
		//  "sources": "/chronograf/v1/sources",
		//  "me": "/chronograf/v1/me",
		//  "environment": "/chronograf/v1/env",
		//  "dashboards": "/chronograf/v1/dashboards",
		//	"dashboardsv2":"/chronograf/v2/dashboards",
		//  "config": {
		//    "self": "/chronograf/v1/config",
		//    "auth": "/chronograf/v1/config/auth"
		//  },
		//  "auth": [
		//    {
		//      "name": "github",
		//      "label": "Github",
		//      "login": "/oauth/github/login",
		//      "logout": "/oauth/github/logout",
		//      "callback": "/oauth/github/callback"
		//    }
		//  ],
		//  "logout": "/oauth/logout",
		//  "external": {
		//    "statusFeed": ""
		//  },
		//  "orgConfig": {
		//    "logViewer": "/chronograf/v1/org_config/logviewer",
		//    "self": "/chronograf/v1/org_config"
		//  },
		//  "flux": {
		//    "ast": "/chronograf/v1/flux/ast",
		//    "self": "/chronograf/v1/flux",
		//    "suggestions": "/chronograf/v1/flux/suggestions"
		//  }
		//}
		//`,
		//			},
		//		},
		//		{
		//			name:    "GET /",
		//			subName: "signed into org 1",
		//			fields: fields{
		//				Config: &chronograf.Config{
		//					Auth: chronograf.AuthConfig{
		//						SuperAdminNewUsers: true,
		//					},
		//				},
		//				Organizations: []chronograf.Organization{
		//					{
		//						ID:          "1",
		//						Name:        "cool",
		//						DefaultRole: roles.ViewerRoleName,
		//					},
		//				},
		//				Users: []chronograf.User{
		//					{
		//						ID:         1, // This is artificial, but should be reflective of the users actual ID
		//						Name:       "billibob",
		//						Provider:   "github",
		//						Scheme:     "oauth2",
		//						SuperAdmin: false,
		//						Roles: []chronograf.Role{
		//							{
		//								Name:         "admin",
		//								Organization: "default",
		//							},
		//							{
		//								Name:         "member",
		//								Organization: "1",
		//							},
		//						},
		//					},
		//				},
		//			},
		//			args: args{
		//				server: &server.Server{
		//					GithubClientID:     "not empty",
		//					GithubClientSecret: "not empty",
		//				},
		//				method: "GET",
		//				path:   "/chronograf/v1/",
		//				principal: oauth2.Principal{
		//					Organization: "1",
		//					Subject:      "billibob",
		//					Issuer:       "github",
		//				},
		//			},
		//			wants: wants{
		//				statusCode: 200,
		//				body: `
		//{
		//  "layouts": "/chronograf/v1/layouts",
		//  "cells": "/chronograf/v2/cells",
		//  "users": "/chronograf/v1/organizations/1/users",
		//  "allUsers": "/chronograf/v1/users",
		//  "organizations": "/chronograf/v1/organizations",
		//  "mappings": "/chronograf/v1/mappings",
		//  "sources": "/chronograf/v1/sources",
		//  "me": "/chronograf/v1/me",
		//  "environment": "/chronograf/v1/env",
		//  "dashboards": "/chronograf/v1/dashboards",
		//	"dashboardsv2":"/chronograf/v2/dashboards",
		//  "config": {
		//    "self": "/chronograf/v1/config",
		//    "auth": "/chronograf/v1/config/auth"
		//  },
		//  "orgConfig": {
		//    "logViewer": "/chronograf/v1/org_config/logviewer",
		//    "self": "/chronograf/v1/org_config"
		//  },
		//  "auth": [
		//    {
		//      "name": "github",
		//      "label": "Github",
		//      "login": "/oauth/github/login",
		//      "logout": "/oauth/github/logout",
		//      "callback": "/oauth/github/callback"
		//    }
		//  ],
		//  "logout": "/oauth/logout",
		//  "external": {
		//    "statusFeed": ""
		//  },
		//  "flux": {
		//    "ast": "/chronograf/v1/flux/ast",
		//    "self": "/chronograf/v1/flux",
		//    "suggestions": "/chronograf/v1/flux/suggestions"
		//  }
		//}
		//`,
		//			},
		//		},
	}

	for _, tt := range tests {
		testName := fmt.Sprintf("%s: %s", tt.name, tt.subName)
		t.Run(testName, func(t *testing.T) {
			ctx := context.TODO()
			// Create Test Server
			host, port := hostAndPort()
			tt.args.server.Host = host
			tt.args.server.Port = port

			// Use testdata directory for the canned data
			tt.args.server.CannedPath = "testdata"
			tt.args.server.ResourcesPath = "testdata"

			// This is so that we can use staticly generate jwts
			tt.args.server.TokenSecret = "secret"

			// Endpoint for validating RSA256 signatures when using id_token parsing for ADFS
			tt.args.server.JwksURL = ""

			boltFile := newBoltFile()
			tt.args.server.BoltPath = boltFile

			// Prepopulate BoltDB Database for Server
			boltdb := bolt.NewClient()
			boltdb.Path = boltFile

			logger := &chronograf.NoopLogger{}
			build := chronograf.BuildInfo{
				Version: "pre-1.4.0.0",
				Commit:  "",
			}
			_ = boltdb.Open(ctx, logger, build)

			if tt.fields.Config != nil {
				if err := boltdb.ConfigStore.Update(ctx, tt.fields.Config); err != nil {
					t.Fatalf("failed to update global application config %v", err)
					return
				}
			}

			// Populate Organizations
			for i, mapping := range tt.fields.Mappings {
				o, err := boltdb.MappingsStore.Add(ctx, &mapping)
				if err != nil {
					t.Fatalf("failed to add mapping: %v", err)
					return
				}
				tt.fields.Mappings[i] = *o
			}

			// Populate Organizations
			for i, organization := range tt.fields.Organizations {
				o, err := boltdb.OrganizationsStore.Add(ctx, &organization)
				if err != nil {
					t.Fatalf("failed to add organization: %v", err)
					return
				}
				tt.fields.Organizations[i] = *o
			}

			// Populate Users
			for i, user := range tt.fields.Users {
				u, err := boltdb.UsersStore.Add(ctx, &user)
				if err != nil {
					t.Fatalf("failed to add user: %v", err)
					return
				}
				tt.fields.Users[i] = *u
			}

			// Populate Sources
			for i, source := range tt.fields.Sources {
				s, err := boltdb.SourcesStore.Add(ctx, source)
				if err != nil {
					t.Fatalf("failed to add source: %v", err)
					return
				}
				tt.fields.Sources[i] = s
			}

			// Populate Servers
			for i, server := range tt.fields.Servers {
				s, err := boltdb.ServersStore.Add(ctx, server)
				if err != nil {
					t.Fatalf("failed to add server: %v", err)
					return
				}
				tt.fields.Servers[i] = s
			}

			// Populate Layouts
			for i, layout := range tt.fields.Layouts {
				l, err := boltdb.LayoutsStore.Add(ctx, layout)
				if err != nil {
					t.Fatalf("failed to add layout: %v", err)
					return
				}
				tt.fields.Layouts[i] = l
			}

			// Populate Dashboards
			for i, dashboard := range tt.fields.Dashboards {
				d, err := boltdb.DashboardsStore.Add(ctx, dashboard)
				if err != nil {
					t.Fatalf("failed to add dashboard: %v", err)
					return
				}
				tt.fields.Dashboards[i] = d
			}

			_ = boltdb.Close()

			go tt.args.server.Serve(ctx)
			serverURL := fmt.Sprintf("http://%v:%v%v", host, port, tt.args.path)

			// Wait for the server to come online
			timeout := time.Now().Add(30 * time.Second)
			for {
				_, err := http.Get(serverURL + "/swagger.json")
				if err == nil {
					break
				}
				if time.Now().After(timeout) {
					t.Fatalf("failed to start server")
					return
				}
			}

			// Set the Expiry time on the principal
			tt.args.principal.IssuedAt = time.Now()
			tt.args.principal.ExpiresAt = time.Now().Add(10 * time.Second)

			// Construct HTTP Request
			buf, _ := json.Marshal(tt.args.payload)
			reqBody := ioutil.NopCloser(bytes.NewReader(buf))
			req, _ := http.NewRequest(tt.args.method, serverURL, reqBody)
			token, _ := oauth2.NewJWT(tt.args.server.TokenSecret, tt.args.server.JwksURL).Create(ctx, tt.args.principal)
			req.AddCookie(&http.Cookie{
				Name:     "session",
				Value:    string(token),
				HttpOnly: true,
				Path:     "/",
			})

			// Make actual http request
			resp, err := http.DefaultClient.Do(req)
			if err != nil {
				t.Fatalf("failed to make httprequest: %v", err)
				return
			}

			content := resp.Header.Get("Content-Type")
			body, _ := ioutil.ReadAll(resp.Body)

			if resp.StatusCode != tt.wants.statusCode {
				t.Errorf(
					"%s %s Status Code = %v, want %v",
					tt.args.method,
					tt.args.path,
					resp.StatusCode,
					tt.wants.statusCode,
				)
			}

			if tt.wants.contentType != "" && content != tt.wants.contentType {
				t.Errorf(
					"%s %s Content Type = %v, want %v",
					tt.args.method,
					tt.args.path,
					content,
					tt.wants.contentType,
				)
			}

			if eq, err := jsonEqual(tt.wants.body, string(body)); err != nil || !eq {
				t.Errorf(
					"%s %s Body = %v, want %v",
					tt.args.method,
					tt.args.path,
					string(body),
					tt.wants.body,
				)
			}

			tt.args.server.Listener.Close()
		})
	}
}
