diff --git a/t/kalamar_user_client.t b/t/kalamar_user_client.t
deleted file mode 100644
index 4c79c53..0000000
--- a/t/kalamar_user_client.t
+++ /dev/null
@@ -1,92 +0,0 @@
-use Mojo::Base -strict;
-use Test::Mojo;
-use Test::More;
-use Mojolicious::Lite;
-use lib 'lib', '../lib';
-
-my $t = Test::Mojo->new;
-my $app = $t->app;
-
-# Add additional plugin path
-push(@{app->plugins->namespaces}, 'Kalamar::Plugin');
-
-plugin 'CHI' => {
-  user => {
-    driver => 'Memory',
-    global => 1
-  }
-};
-
-plugin 'KalamarUser' => {
-  api => 'http://10.0.10.51:7070/api/v0.1/'
-};
-
-post '/acct/login' => sub {
-  my $c = shift;
-  my $user = $c->param('user');
-  my $pwd  = $c->param('pwd');
-  return $c->redirect_to('index') if $c->user->login($user, $pwd);
-  return $c->redirect_to;
-} => 'login';
-
-
-get '/' => sub {
-  my $c = shift;
-  my $details = $c->user->get('details');
-  return $c->redirect_to('login') unless $details;
-  $c->render(json => $details);
-} => 'index';
-
-
-get '/acct/settings' => sub {
-  my $c = shift;
-  my $settings = $c->user->get('settings');
-  return $c->redirect_to('login') unless $settings;
-  $c->render(json => $settings);
-};
-
-
-$t->get_ok('/')
-  ->status_is(302)
-  ->header_is('location', '/acct/login');
-
-# Tests
-$t->post_ok('/acct/login' => {} => form => {
-  user => 'kustvakt',
-  pwd => 'kustvakt2015'
-})
-  ->status_is(302)
-  ->header_is('location', '/');
-
-$t->get_ok('/')
-  ->status_is(200)
-  ->json_is('/country', 'Germany')
-  ->json_is('/firstName', 'Kustvakt')
-  ->json_is('/lastName', 'KorAP')
-  ->json_is('/email', 'kustvakt@ids-mannheim.de')
-  ;
-
-$t->get_ok('/acct/settings')
-  ->status_is(200)
-  ->json_is('/queryLanguage', 'COSMAS2')
-  ->json_is('/constFoundry', 'mate')
-  ->json_is('/relFoundry', 'mate')
-  ->json_is('/lemmaFoundry', 'tt')
-  ->json_is('/POSFoundry', 'tt')
-  ;
-
-done_testing;
-
-__END__
-
-# print Dumper $user->user_query;
-# print Dumper $user->get_collection_stat('242eea9442fcba4e4f51e4ff292eebe2aca4e7f3');
-# print Dumper $user->user_settings;
-print Dumper $user->collections;
-
-#print "\n";
-
-# my $x = 'ZGU0ZTllNTFkYzc3M2VhZmViYzdkYWE2ODI5NDc3NTk4NGQ1YThhOTMwOTNhOWYxNWMwN2M3Y2YyZmE3N2RlNQ==';
-# print b($x)->b64_decode,"\n";
-
-my $user = Kalamar::User->new->authorize_jwt('kustvakt', 'kustvakt2015');
