Инициализация ложных данных в соответствии с правилами Firestore - PullRequest
0 голосов
/ 30 января 2020

Я тестирую простое правило:

match /users/{userId} {
  allow write, get: if isSignedIn() && userOwner(userId);
}

function isSignedIn(){
  return request.auth != null
}

function userOwner(userId){
  return userId == request.auth.uid
}

Вот мой тест:

test("read succeed only if requested user is authenticated user", async () => {
  const db = await setup(
    {
      uid: "testid",
      email: "test@test.com"
    },
    {
      "users/testid": {},
      "users/anotherid": {}
    }
  );
  const userRef = db.collection("users");
  expect(await assertSucceeds(userRef.doc("testid").get()));
  expect(await assertFails(userRef.doc("anotherid").get()));
})

И метод настройки:

export const setup = async (auth?: any, data?: any) => {
  const projectId = `rules-spec-${Date.now()}`;
  const app = firebase.initializeTestApp({
    projectId,
    auth
  });

  const db = app.firestore();
  if (data) {
    for (const key in data) {
      const ref = db.doc(key);
      await ref.set(data[key]);
    }
  }

  await firebase.loadFirestoreRules({
    projectId,
    rules: fs.readFileSync("firestore.rules").toString()
  });

  return db;
};

Выдает следующая ошибка:

FirebaseError: 7 PERMISSION_DENIED:
false for 'create' @ L5, Null value error. for 'create' @ L9

Похоже, что при попытке установить фиктивные данные, указанные в setup, это невозможно из-за правила write. но я не понимаю, я загружаю правила после того, как база данных установлена.

Есть идеи, что здесь происходит?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...