// Copyright 2019 The Gitea Authors. All rights reserved. // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. package integrations import ( "fmt" "net/http" "net/url" "testing" "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/modules/setting" api "code.gitea.io/gitea/modules/structs" "github.com/stretchr/testify/assert" ) func getDeleteFileOptions() *api.DeleteFileOptions { return &api.DeleteFileOptions{ FileOptions: api.FileOptions{ BranchName: "master", NewBranchName: "master", Message: "Removing the file new/file.txt", Author: api.Identity{ Name: "John Doe", Email: "johndoe@example.com", }, Committer: api.Identity{ Name: "Jane Doe", Email: "janedoe@example.com", }, }, SHA: "103ff9234cefeee5ec5361d22b49fbb04d385885", } } func TestAPIDeleteFile(t *testing.T) { onGiteaRun(t, func(t *testing.T, u *url.URL) { user2 := models.AssertExistsAndLoadBean(t, &models.User{ID: 2}).(*models.User) // owner of the repo1 & repo16 user3 := models.AssertExistsAndLoadBean(t, &models.User{ID: 3}).(*models.User) // owner of the repo3, is an org user4 := models.AssertExistsAndLoadBean(t, &models.User{ID: 4}).(*models.User) // owner of neither repos repo1 := models.AssertExistsAndLoadBean(t, &models.Repository{ID: 1}).(*models.Repository) // public repo repo3 := models.AssertExistsAndLoadBean(t, &models.Repository{ID: 3}).(*models.Repository) // public repo repo16 := models.AssertExistsAndLoadBean(t, &models.Repository{ID: 16}).(*models.Repository) // private repo fileID := 0 // Get user2's token session := loginUser(t, user2.Name) token2 := getTokenForLoggedInUser(t, session) session = emptyTestSession(t) // Get user4's token session = loginUser(t, user4.Name) token4 := getTokenForLoggedInUser(t, session) session = emptyTestSession(t) // Test deleting a file in repo1 which user2 owns, try both with branch and empty branch for _, branch := range [...]string{ "master", // Branch "", // Empty branch } { fileID++ treePath := fmt.Sprintf("delete/file%d.txt", fileID) createFile(user2, repo1, treePath) deleteFileOptions := getDeleteFileOptions() deleteFileOptions.BranchName = branch url := fmt.Sprintf("/api/v1/repos/%s/%s/contents/%s?token=%s", user2.Name, repo1.Name, treePath, token2) req := NewRequestWithJSON(t, "DELETE", url, &deleteFileOptions) resp := session.MakeRequest(t, req, http.StatusOK) var fileResponse api.FileResponse DecodeJSON(t, resp, &fileResponse) assert.NotNil(t, fileResponse) assert.Nil(t, fileResponse.Content) } // Test deleting file and making the delete in a new branch fileID++ treePath := fmt.Sprintf("delete/file%d.txt", fileID) createFile(user2, repo1, treePath) deleteFileOptions := getDeleteFileOptions() deleteFileOptions.BranchName = repo1.DefaultBranch deleteFileOptions.NewBranchName = "new_branch" url := fmt.Sprintf("/api/v1/repos/%s/%s/contents/%s?token=%s", user2.Name, repo1.Name, treePath, token2) req := NewRequestWithJSON(t, "DELETE", url, &deleteFileOptions) resp := session.MakeRequest(t, req, http.StatusOK) var fileResponse api.FileResponse DecodeJSON(t, resp, &fileResponse) assert.NotNil(t, fileResponse) assert.Nil(t, fileResponse.Content) assert.EqualValues(t, deleteFileOptions.Message+"\n", fileResponse.Commit.Message) // Test deleting file without a message fileID++ treePath = fmt.Sprintf("delete/file%d.txt", fileID) createFile(user2, repo1, treePath) deleteFileOptions = getDeleteFileOptions() deleteFileOptions.Message = "" url = fmt.Sprintf("/api/v1/repos/%s/%s/contents/%s?token=%s", user2.Name, repo1.Name, treePath, token2) req = NewRequestWithJSON(t, "DELETE", url, &deleteFileOptions) resp = session.MakeRequest(t, req, http.StatusOK) DecodeJSON(t, resp, &fileResponse) expectedMessage := "Delete '" + treePath + "'\n" assert.EqualValues(t, expectedMessage, fileResponse.Commit.Message) // Test deleting a file with the wrong SHA fileID++ treePath = fmt.Sprintf("delete/file%d.txt", fileID) createFile(user2, repo1, treePath) deleteFileOptions = getDeleteFileOptions() correctSHA := deleteFileOptions.SHA deleteFileOptions.SHA = "badsha" url = fmt.Sprintf("/api/v1/repos/%s/%s/contents/%s?token=%s", user2.Name, repo1.Name, treePath, token2) req = NewRequestWithJSON(t, "DELETE", url, &deleteFileOptions) resp = session.MakeRequest(t, req, http.StatusInternalServerError) expectedAPIError := context.APIError{ Message: "sha does not match [given: " + deleteFileOptions.SHA + ", expected: " + correctSHA + "]", URL: setting.API.SwaggerURL, } var apiError context.APIError DecodeJSON(t, resp, &apiError) assert.Equal(t, expectedAPIError, apiError) // Test creating a file in repo16 by user4 who does not have write access fileID++ treePath = fmt.Sprintf("delete/file%d.txt", fileID) createFile(user2, repo16, treePath) deleteFileOptions = getDeleteFileOptions() url = fmt.Sprintf("/api/v1/repos/%s/%s/contents/%s?token=%s", user2.Name, repo16.Name, treePath, token4) req = NewRequestWithJSON(t, "DELETE", url, &deleteFileOptions) session.MakeRequest(t, req, http.StatusNotFound) // Tests a repo with no token given so will fail fileID++ treePath = fmt.Sprintf("delete/file%d.txt", fileID) createFile(user2, repo16, treePath) deleteFileOptions = getDeleteFileOptions() url = fmt.Sprintf("/api/v1/repos/%s/%s/contents/%s", user2.Name, repo16.Name, treePath) req = NewRequestWithJSON(t, "DELETE", url, &deleteFileOptions) session.MakeRequest(t, req, http.StatusNotFound) // Test using access token for a private repo that the user of the token owns fileID++ treePath = fmt.Sprintf("delete/file%d.txt", fileID) createFile(user2, repo16, treePath) deleteFileOptions = getDeleteFileOptions() url = fmt.Sprintf("/api/v1/repos/%s/%s/contents/%s?token=%s", user2.Name, repo16.Name, treePath, token2) req = NewRequestWithJSON(t, "DELETE", url, &deleteFileOptions) session.MakeRequest(t, req, http.StatusOK) // Test using org repo "user3/repo3" where user2 is a collaborator fileID++ treePath = fmt.Sprintf("delete/file%d.txt", fileID) createFile(user3, repo3, treePath) deleteFileOptions = getDeleteFileOptions() url = fmt.Sprintf("/api/v1/repos/%s/%s/contents/%s?token=%s", user3.Name, repo3.Name, treePath, token2) req = NewRequestWithJSON(t, "DELETE", url, &deleteFileOptions) session.MakeRequest(t, req, http.StatusOK) // Test using org repo "user3/repo3" with no user token fileID++ treePath = fmt.Sprintf("delete/file%d.txt", fileID) createFile(user3, repo3, treePath) deleteFileOptions = getDeleteFileOptions() url = fmt.Sprintf("/api/v1/repos/%s/%s/contents/%s", user3.Name, repo3.Name, treePath) req = NewRequestWithJSON(t, "DELETE", url, &deleteFileOptions) session.MakeRequest(t, req, http.StatusNotFound) // Test using repo "user2/repo1" where user4 is a NOT collaborator fileID++ treePath = fmt.Sprintf("delete/file%d.txt", fileID) createFile(user2, repo1, treePath) deleteFileOptions = getDeleteFileOptions() url = fmt.Sprintf("/api/v1/repos/%s/%s/contents/%s?token=%s", user2.Name, repo1.Name, treePath, token4) req = NewRequestWithJSON(t, "DELETE", url, &deleteFileOptions) session.MakeRequest(t, req, http.StatusForbidden) }) } automated/noid/main-fix-npm-audit'>automated/noid/main-fix-npm-audit Nextcloud server, a safe home for all your data: https://github.com/nextcloud/serverwww-data
summaryrefslogtreecommitdiffstats
path: root/apps/user_ldap/l10n/lb.json
blob: e869a5821b19fb12535f495abd82962b7de4d2b7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
{ "translations": {
    "Failed to delete the server configuration" : "D'Server-Konfiguratioun konnt net geläscht ginn",
    "The configuration is invalid: anonymous bind is not allowed." : "Dës Konfiguratioun ass ongëlteg: eng anonym Bindung ass net erlaabt.",
    "Action does not exist" : "Dës Aktioun gëtt et net",
    "Testing configuration…" : "D'Konfiguratioun gëtt getest...",
    "Configuration incorrect" : "D'Konfiguratioun ass net korrekt",
    "Configuration incomplete" : "D'Konfiguratioun ass net komplett",
    "Configuration OK" : "Konfiguratioun OK",
    "Select groups" : "Wiel Gruppen äus",
    "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "D'Späicheren huet net geklappt. W.e.g. géi sécher dass Datebank an der Operatioun ass. Lued nach emol éiers de weider fiers.",
    "Select attributes" : "Wiel Attributer aus",
    "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "De Benotzer konnt net fonnt ginn. W.e.g. kuck deng Login Attributer a Benotzernumm no. \n ",
    "_%s group found_::_%s groups found_" : ["%s Grupp fonnt","%s Gruppe fonnt"],
    "_%s user found_::_%s users found_" : ["%s Benotzer fonnt","%s Benotzere fonnt"],
    "Could not find the desired feature" : "Déi gewënschte Funktioun konnt net fonnt ginn",
    "Server" : "Server",
    "Users" : "Benotzer",
    "Groups" : "Gruppen",
    "Test Configuration" : "Konfiguratiounstest",
    "Help" : "Hëllef",
    "Groups meeting these criteria are available in %s:" : "D'Gruppen, déi dës Critèren erfëllen sinn am %s:",
    "Only these object classes:" : "Nëmmen des Klass vun Objeten:",
    "Only from these groups:" : "Nëmme vun dëse Gruppen:",
    "Search groups" : "Sich Gruppen",
    "Available groups" : "Disponibel Gruppen",
    "Selected groups" : "Ausgewielte Gruppen",
    "Test Loginname" : "Test Benotzernumm",
    "Verify settings" : "Astellungen iwwerpréiwen",
    "1. Server" : "1. Server",
    "%s. Server:" : "%s. Server",
    "Delete the current configuration" : "Läsch déi aktuell Konfiguratioun",
    "Host" : "Host",
    "Port" : "Port",
    "User DN" : "Benotzer DN",
    "Password" : "Passwuert",
    "Saving" : "Speicheren...",
    "Back" : "Zeréck",
    "Continue" : "Weider",
    "Advanced" : "Erweidert",
    "Connection Settings" : "D'Astellunge vun der Verbindung",
    "Configuration Active" : "D'Konfiguratioun ass aktiv",
    "When unchecked, this configuration will be skipped." : "Ouni Iwwerpréiwung wäert dës Konfiguratioun iwwergaange ginn.",
    "Directory Settings" : "Dossier's Astellungen",
    "in bytes" : "A Bytes",
    "Email Field" : "Email Feld",
    "Internal Username" : "Interne Benotzernumm",
    "Internal Username Attribute:" : "Interne Benotzernumm Attribut:"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}