Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Q11. [個人技能題組][Backend] 功能:會員資料頁面。 #12

Open
wildwindjen opened this issue Mar 15, 2017 · 7 comments
Open

Comments

@wildwindjen
Copy link
Contributor

wildwindjen commented Mar 15, 2017

請開發

  • 一個編輯會員資料的 API,除了可以更改「姓名」、「密碼」,還要能上傳「大頭照」。照片限制只能上傳 png 格式、大小 2MB、不同會員上傳相同檔名大頭照各自不受影響、同一個會員重複上傳不同大頭照只留最新的那張。
  • 一個讀取會員資料的 API,基本資料 + 大頭照。

a. 上傳檔案的功能,在測試或開發上有什麼比較不一樣的地方?
b. 上傳的圖片存放在哪裡?為什麼?
c. 請提供 github 程式碼路徑。
d. 用了什麼方式滿足「不同會員上傳相同檔名大頭照各自不受影響」、「同一個會員重複上傳不同大頭照只留最新的那張」,請簡述你的設計。
e. 請提供驗收項目清單。

答題時間: 8 hr

@dustfantasy
Copy link

dustfantasy commented Apr 3, 2017

「於 2017/04/03 開始答題」

a.
除去一般對資料庫做更動,還必須先考慮檔案的存放地點方式,可以存在資料庫也可以保存在檔案目錄內或是雲端等作法。

b.
程序目錄下,並沒特別設想要額外地方存放。

c.
https://gitlab.com/enioy74/Practice1/blob/master/controllers/member.js

d.
不同會員上傳相同檔名大頭照各自不受影響:
在伺服器端存放的圖片名會是自己命名的圖片名,而這圖片名會存在資料庫作為會員的一欄,以此判別對應的圖片。

同一個會員重複上傳不同大頭照只留最新的那張:
在重複上傳會去查看資料庫找原先上傳的圖片名並刪除,之後將新圖片名加進。

e.
驗收項目有三,更改的資料是否符合判定、圖片大小格式是否正確限制、是否刪除原先圖片保留最新的。

A更改的資料是否符合判定
1.拿正確資料更改,預期回傳'更新成功'的訊息。
測試資料「name:aa, password:aa,photo:[file size<2MB]」。
2.拿空值更改名,預期回傳'名字不能為空'的訊息。
測試資料「name:, password:aa,photo:[file size<2MB]」。
3.拿空值更改密碼,預期回傳'密碼不能為空'的訊息。
測試資料「name:aa, password:,photo:[file size<2MB]」。

B圖片大小格式是否正確限制
1.拿小於2MB檔上傳,預期回傳'更新成功'的訊息。
測試資料「name:aa, password:aa,photo:[file size<2MB]」。
2.拿大於2MB檔上傳,預期回傳'檔案過大'的訊息。
測試資料「name:aa, password:aa,photo:[file size>2MB]」。
3.拿非png檔上傳,預期回傳'檔案格式錯誤'的訊息。
測試資料「name:aa, password:aa,photo:[file size<2MB][.txt]」。

C是否刪除原先圖片保留最新的
與資料庫資料跟圖片目錄檔案做比對。

「於 2017/04/04 答題結束」

@dwatow
Copy link

dwatow commented Apr 4, 2017

「於 2017/04/04 開始答題」
一個編輯會員資料的 API
除了可以更改「姓名」、「密碼」,還要能上傳「大頭照」。
照片限制只能上傳 png 格式、大小 2MB
不同會員上傳相同檔名大頭照各自不受影響
同一個會員重複上傳不同大頭照只留最新的那張。

一個讀取會員資料的 API,基本資料 + 大頭照。

a. 上傳檔案的功能,在測試或開發上有什麼比較不一樣的地方?
本機存取權限和遠端存取權限

b. 上傳的圖片存放在哪裡?為什麼?
static資料夾。不要放在資料庫。

c. 請提供 github 程式碼路徑。
!!!

d. 用了什麼方式滿足「不同會員上傳相同檔名大頭照各自不受影響」、「同一個會員重複上傳不同大頭照只留最新的那張」,請簡述你的設計。
儲存與Id相同檔名,每一次都覆蓋掉

e. 請提供驗收項目清單。
資料驗證
傳送修改不存在的id -> error
傳送姓名改成空白 -> error
傳送密碼改成空白 -> error

照片驗證
傳送照片檔案等於0MB -> success(用空白圖覆蓋照片, 刪除路徑)
傳送照片檔案大於2MB -> error
傳送照片副檔名不是.png -> error

兩個會員資料id: 1, id: 2
各有兩張內容不同, 檔名相同的圖片my.png,
id: 1的request儲存到./static/1.png
id: 2的request儲存到./static/2.png
比較其大小不同。

一個會員資料id: 1
各有兩張內容不同, 檔名相同的圖片my1.png, my2.png,
id: 1的request儲存到./static/1.png
在儲存之後,查詢檔案,記錄大小,再儲存第二張照片,查詢檔案,記錄大小。
比較其大小相同。(而且與大小相同)

修改已存在的id -> success

「於 2017/04/04 答題結束」

@YenChunchen
Copy link

YenChunchen commented Apr 13, 2017

「於 2017/04/13 開始答題」
a. 上傳檔案的功能,在測試或開發上有什麼比較不一樣的地方?
需決定檔案要以什麼方式存放(base64 or 檔案位置...),測試時要測試各種情況(欄位錯誤時有傳檔案或傳檔案時欄位錯誤或會員存在時有傳檔案...)的檔案處理
b. 上傳的圖片存放在哪裡?為什麼?后端程式下的pic/member;相較於存在DB較不會浪費DB空間
c. 請提供 github 程式碼路徑。
https://github.com/YenChunchen/backend-tranining/blob/master/controller/member.js
https://github.com/YenChunchen/backend-tranining/blob/master/model/member/update_member_todb.js
d. 用了什麼方式滿足「不同會員上傳相同檔名大頭照各自不受影響」、「同一個會員重複上傳不同大頭照只留最新的那張」,請簡述你的設計。
不同會員上傳相同檔名大頭照各自不受影響:將上傳的檔案以當前時間(ms)加上一隨機數重新命名
同一個會員重複上傳不同大頭照只留最新的那張:更新該筆資料前從先提取舊圖檔檔名,刪除後,將新的資料更新至DB
e. 請提供驗收項目清單。
1.驗證登入才能取得更改資料權限

  • 已登入,account=[email protected],pwd=1111,photo=xxx.png(<=2MB),預期回應(更新成功)
  • 未登入,account=[email protected],pwd=1111,photo=xxx.png(<=2MB),預期回應(請登入會員)
    *以上照預期顯示則表示登入認證通過

2.欄位認證

  • 輸入(changeAccount=aaa,changePwd=111,photo=xxx.png(<=2MB)),預期回應(請輸入正確欄位)
  • 輸入(changeAccount=[email protected],changePwd=',photo=xxx.png(<=2MB)),預期回應(請輸入正確欄位)
  • 輸入(changeAccount='',changePwd=111,photo=xxx.png(<=2MB)),預期回應(請輸入正確欄位)
  • 輸入(changeAccount='',changePwd=111,photo=xxx.png(<=2MB)),預期回應(請輸入正確欄位)
  • 輸入(changeAccount=aaa,changePwd=111,photo=xxx.png(<=2MB)),預期回應(請輸入正確欄位)
    *以上照預期顯示則表示欄位認證通過

3.檢查圖檔是否符合條件

  • 輸入(changeAccount=aaa,changePwd=111,photo=xxx.png(>2MB)),預期回應(請符合檔案限制(小於2M PNG檔))
  • 輸入(changeAccount=[email protected],changePwd='',photo=xxx.txt(<=2MB)),預期回應(請符合檔案限制(小於2M PNG檔))
  • 輸入(changeAccount='',changePwd=111,photo=xxx.jpg(<=2MB)),預期回應(請符合檔案限制(小於2M PNG檔))
  • 輸入(changeAccount=[email protected],changePwd=111,photo=''),預期回應(更新成功)
  • 輸入(changeAccount=[email protected],,changePwd=111,photo=xxx.png(<=2MB)),預期回應(更新成功)
    *以上照預期顯示則表示圖檔檢查通過

4.驗證是否保留最新檔

  • 更新成功數次,預期只會有一個檔案,檔名為最後一次上傳的檔名
  • 更新成功一次,預期只會有一個檔案,檔名為最後一次上傳的檔名
    *以上照預期顯示則表示保留最新檔檢查通過

@PenguinRun
Copy link

PenguinRun commented Apr 14, 2017

「於2017/04/14 開始答題」

a. 上傳檔案的功能,在測試或開發上有什麼比較不一樣的地方?

  • 測試:上傳在local
  • 開發:上傳在remote
    b. 上傳的圖片存放在哪裡?為什麼?
  • A:可放置在DB(轉成base64)
  • B:新增個暫存資料夾存放

目前選擇使用A方案,因為目前有先設定在1MB以下的圖檔,且僅是開發階段,所以對於DB的負荷量還沒那麼重。但後續還是會轉變成B方案,為了降低DB的負荷量。
在專案中兩個方式都有寫到。

c. 請提供 github 程式碼路徑。
edit_controller

d. 用了什麼方式滿足「不同會員上傳相同檔名大頭照各自不受影響」、「同一個會員重複上傳不同大頭照只留最新的那張」,請簡述你的設計。

  • 「不同會員上傳相同檔名大頭照各自不受影響」
    • 在DB欄位中額外新增field來存取原本對方的原始圖片名稱。
    • 假設小王跟小明的圖片是一樣的,但也會因為一開始token是直接解析成各自的ID而不會互有衝突。
  • 「同一個會員重複上傳不同大頭照只留最新的那張」
    • 就上述而言,使用A方案只要有update的行為就會自動蓋掉原本的照片。若使用B方案則需在新增同時去除掉原先上傳的照片。

e. 請提供驗收項目清單。

edit:

驗收「token驗證」

正確:

  • 輸入正確的token
    • 測試資料:「x-access-token: 正確token」
    • 預期結果「可使用edit功能」

=======

錯誤:

  • 輸入錯誤的token
    • 測試資料:「x-access-token: 錯誤token」
    • 預期結果「回應:token錯誤!」
  • 輸入過期的token
    • 測試資料:「x-access-token: 過期token」
    • 預期結果「回應:token錯誤!」
  • 輸入空白的token
    • 測試資料:「x-access-token: 」
    • 預期結果「回應:請輸入token」

=================================================================

驗收「修改圖片資料」

正確:

  • 輸入符合jpg格式且小於1MB大小的圖片
    • 測試資料:「img: 1.jpg」
    • 預期結果「回應:ID: " + : ID + " 修改成功」
  • 輸入符合jpeg格式且小於1MB大小的圖片
    • 測試資料:「img: 123.jpeg」
    • 預期結果「回應:ID: " + : ID + " 修改成功」
  • 輸入符合png格式且小於1MB大小的圖片
    • 測試資料:「img: test.png」
    • 預期結果「回應:ID: " + : ID + " 修改成功」

=======

錯誤:

  • 輸入檔案超過1MB的資料。
    • 測試:上傳檔案大小超過1MB的資料。測試資料:「456.jpg」
    • 預期結果:「回應:請上傳小於1MB的檔案」
  • 輸入不符合jpg, jpeg, png外的資料。
    • 測試:上傳副檔名為.odt, .txt...等。文件資料。測試資料:「rfc7540.pdf」
    • 預期結果:「回應:請選擇正確的檔案格式。如:png, jpg, jpeg等。」

<無判斷有空值,因為不是每個人都必須在更改會員資料的時候要輸入值>

「於2017/04/14 答題結束」

@wildwindjen
Copy link
Contributor Author

wildwindjen commented Apr 16, 2017

@PenguinRun
@YenChunchen

怎麼覺得驗收項目你們兩個寫到後面像程式流程?

原則如下:

驗收 xx (情境):

  1. 輸入測試資料 aaaa,預期結果 oooo。
  2. 輸入測試資料 bbbb,預期結果 xxxx。
  3. ......................
    以上通過,則代表 xx 情境驗收通過。

舉例:
驗收「登入者才能上傳自己的大頭照」

  1. 未登入,上傳圖片 xxx.jpg,預期結果「錯誤訊息: #$%%%#」
  2. 已登入,上傳圖片 xxx.jpg,預期結果「成功訊息: ooooooo」

驗收「上傳的大頭照只能是 jpg, png 格式」

  1. 上傳圖片 xxx.jpg,預期結果「成功訊息: ooooooo」
  2. 上傳圖片 xxx.png,預期結果「成功訊息: ooooooo」
  3. 上傳空圖片,預期結果...........
  4. 上傳其他格式圖片 xxx.tiff,預期結果...........
  5. 上傳其他格式檔案 xxx.txt,預期結果...........
  6. ...........................

情境是從系統規格延展出來的
所以一樣是登入功能,不同網站要驗收的情境可能就不一樣了。
要驗收的時候,一定要「定住」情境,知道自己現在要測試什麼。

@PenguinRun
Copy link

@wildwindjen 已修改完成

@HoHow
Copy link

HoHow commented May 13, 2017

「於2017/05/13 開始答題」
a. 上傳檔案的功能,在測試或開發上有什麼比較不一樣的地方?
必須透過form-data的方式上傳
b. 上傳的圖片存放在哪裡?為什麼?
之前有試過用base64存在資料庫,但如果資料多的話,對於資料庫不太好,所以存在資料夾
c. 請提供 github 程式碼路徑。
https://github.com/HoHow/first_member/blob/master/models/user.js
https://github.com/HoHow/first_member/blob/master/controllers/user.js
d. 用了什麼方式滿足「不同會員上傳相同檔名大頭照各自不受影響」、「同一個會員重複上傳不同大頭照只留最新的那張」,請簡述你的設計。
透過email的唯一性來判斷目前是哪個使用者在上傳團片,僅針對那筆資料去做更新

e. 請提供驗收項目清單。
驗證登入:
登入沒打帳號,預期結果「message:帳號不能為空」
登入沒打密碼,預期結果「message:密碼不能為空」
未登入,預期結果「message:請先登入」
錯誤帳號密碼,預期結果「message:token錯誤」
驗收大頭照:
上傳圖片 xxx.jpg,預期結果「message:更新失敗」
上傳圖片 xxx.png,預期結果「message:更新成功」
上傳空圖片,預期結果「message:請上傳大頭照」
上傳圖片超過2MB,預期結果「message:大頭照超過2MB」
上傳其他格式圖片 xxx.tiff,預期結果「message:大頭照格式錯誤」
上傳其他格式檔案 xxx.txt,預期結果「message:大頭照格式錯誤」

「於2017/05/13 結束答題」

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants