Showing 3 changed files with 46 additions and 53 deletions
+30 -47
templates/settings.html.ep
... ...
@@ -73,46 +73,33 @@
73 73
     }
74 74
     
75 75
     # Change default branch
76
-    elsif ($op eq 'default-branch') {
76
+    elsif ($op eq 'save-settings') {
77
+      
78
+      # Parameters
77 79
       my $default_branch = param('default-branch');
80
+      my $private = param('private');
81
+      my $params = {};
82
+      if (defined $default_branch) {
83
+        $params->{default_branch} = $default_branch;
84
+      }
85
+      if (defined $private) {
86
+        $params->{private} = $private ? 1 : 0;
87
+      };
78 88
       
79 89
       my $dbi = app->dbi;
80 90
       eval {
81 91
         $dbi->model('project')->update(
82
-          {default_branch => $default_branch},
92
+          $params,
83 93
           where => {user_id => $user, name => $project}
84 94
         );
85 95
       };
86 96
       
87 97
       if (my $e = $@) {
88
-        app->log->error("/$user/$project/settings?op=default-branch: $e");
98
+        app->log->error("/$user/$project/settings?op=save-settings: $e");
89 99
         $errors = ['Internal Error'];
90 100
       }
91 101
       else {
92
-        flash(message => "Default branch is changed to $default_branch.");
93
-        $self->redirect_to('current');
94
-        return;
95
-      }
96
-    }
97
-    
98
-    # Private repository
99
-    elsif ($op eq 'private') {
100
-      my $private = param('private') ? 1 : 0;
101
-      
102
-      eval {
103
-        app->dbi->model('project')->update(
104
-          {private => $private},
105
-          id => [$user, $project]
106
-        );
107
-      };
108
-      if (my $e = $@) {
109
-        app->log->error("/$user/$project/settings?op=private: $e");
110
-        $errors = ['Internal Error'];
111
-      }
112
-      else {
113
-        my $message = 'Private status is saved. Repository is '
114
-          . ($private ? 'private' : 'public');
115
-        flash(message => $message);
102
+        flash(message => "Settings is saved");
116 103
         $self->redirect_to('current');
117 104
         return;
118 105
       }
... ...
@@ -148,11 +135,6 @@
148 135
       $('#rename').on('click', function () {
149 136
         $('#form-rename-project').submit();
150 137
       });
151
-      
152
-      // Select default branch
153
-      $('[name=default-branch]').on('change', function () {
154
-        $('#form-default-branch').submit();
155
-      });
156 138
 
157 139
       // Check matching deleted project
158 140
       $('input[name="deleted-project"]').on('keyup', function () {
... ...
@@ -227,14 +209,15 @@
227 209
           </li>
228 210
         </ul>
229 211
         
230
-        <ul class="project-settings-main">
231
-          <li>
232
-            <h4>
233
-              Settings
234
-            </h4>
235
-          </li>
236
-          <li>
237
-            <form id="form-default-branch" action="<%= url_for->query(op => 'default-branch') %>" method="post">
212
+        <form id="form-default-branch" action="<%= url_for %>" method="post">
213
+          %= hidden_field op => 'save-settings';
214
+          <ul class="project-settings-main">
215
+            <li>
216
+              <h4>
217
+                Settings
218
+              </h4>
219
+            </li>
220
+            <li>
238 221
               Default Branch
239 222
               <%
240 223
                 my $branches = $git->branches($user, $project);
... ...
@@ -244,20 +227,20 @@
244 227
                 param('default-branch', $default_branch);
245 228
               %>
246 229
               %= select_field 'default-branch' => $branch_names;
247
-            </form>
248
-          </li>
249
-          <li>
250
-            <form id="form-default-branch" action="<%= url_for->query(op => 'private') %>" method="post">
230
+            </li>
231
+            <li>
251 232
               <span>Make this repository private</span>
252 233
               % my $private = app->manager->is_private_project($user, $project);
253 234
               % if ($private) {
254 235
                 % param('private', 1);
255 236
               % }
256 237
               %= check_box 'private' => 1;
238
+            </li>
239
+            <li>
257 240
               <input type="submit" class="btn" value="Save">
258
-            </form>
259
-          </li>
260
-        </ul>
241
+            </li>
242
+          </ul>
243
+        </form>
261 244
 
262 245
         <ul class="project-settings-danger">
263 246
           <li style="background:red;padding-left:5px">
+2 -2
xt/smart_http.t
... ...
@@ -162,8 +162,8 @@ note 'Private repository and collaborator';
162 162
   $t->content_like(qr/README/);
163 163
   
164 164
   # Check private repository
165
-  $t->post_ok("/kimoto/t1/settings?op=private", form => {private => 1});
166
-  $t->content_like(qr/Repository is private/);
165
+  $t->post_ok("/kimoto/t1/settings?op=save-settings", form => {private => 1});
166
+  $t->content_like(qr/Settings is saved/);
167 167
   
168 168
   # Can access private repository from myself
169 169
   $t->get_ok(
+14 -4
xt/user.t
... ...
@@ -365,8 +365,13 @@ note 'Profile';
365 365
       system($cmd) == 0 or die "Can't execute git branch";
366 366
       $t->get_ok('/kimoto1/t2/settings');
367 367
       $t->content_like(qr/b1/);
368
-      $t->post_ok("/kimoto1/t2/settings?op=default-branch", form => {'default-branch' => 'b1'});
369
-      $t->content_like(qr/Default branch is changed to b1/);
368
+      $t->post_ok("/kimoto1/t2/settings?op=save-settings", form => {'default-branch' => 'b1'});
369
+      $t->content_like(qr/Settings is saved/);
370
+      my $changed = $t->app->dbi->model('project')->select(
371
+        'default_branch',
372
+        where => {user_id => 'kimoto1', name => 't2'}
373
+      )->value;
374
+      is($changed, 'b1');
370 375
     }
371 376
     
372 377
     note 'Delete project';
... ...
@@ -552,8 +557,13 @@ note 'Private repository and collaborator';
552 557
   $t->content_like(qr/README/);
553 558
   
554 559
   # Check private repository
555
-  $t->post_ok("/kimoto/t1/settings?op=private", form => {private => 1});
556
-  $t->content_like(qr/Repository is private/);
560
+  $t->post_ok("/kimoto/t1/settings?op=save-settings", form => {private => 1});
561
+  $t->content_like(qr/Settings is saved/);
562
+  my $is_private = $t->app->dbi->model('project')->select(
563
+    'private',
564
+    where => {user_id => 'kimoto', name => 't1'}
565
+  )->value;
566
+  is($is_private, 1);
557 567
   
558 568
   # Can access repository myself
559 569
   $t->get_ok("/kimoto/t1");