text: const Blog = require('../models/blog')
  const User = require('../models/user')
  const bcrypt = require('bcrypt')
  // eslint-disable-next-line no-unused-vars
  const regenerator = require('regenerator-runtime/runtime')
  
  const testUser = {
    username: 'test_user',
    name: 'test user',
    password: 'password'
  }
  
  const initialBlogs = [
    {
      _id: '5a422a851b54a676234d17f7',
      title: 'React patterns',
      author: 'Michael Chan',
      url: 'https://reactpatterns.com/',
      likes: 7,
      __v: 0
    },
    {
      _id: '5a422aa71b54a676234d17f8',
      title: 'Go To Statement Considered Harmful',
      author: 'Edsger W. Dijkstra',
      url: 'http://www.u.arizona.edu/~rubinson/copyright_violations/Go_To_Considered_Harmful.html',
      likes: 5,
      __v: 0
    },
    {
      _id: '5a422b3a1b54a676234d17f9',
      title: 'Canonical string reduction',
      author: 'Edsger W. Dijkstra',
      url: 'http://www.cs.utexas.edu/~EWD/transcriptions/EWD08xx/EWD808.html',
      likes: 12,
      __v: 0
    },
    {
      _id: '5a422b891b54a676234d17fa',
      title: 'First class tests',
      author: 'Robert C. Martin',
      url: 'http://blog.cleancoder.com/uncle-bob/2017/05/05/TestDefinitions.htmll',
      likes: 10,
      __v: 0
    },
    {
      _id: '5a422ba71b54a676234d17fb',
      title: 'TDD harms architecture',
      author: 'Robert C. Martin',
      url: 'http://blog.cleancoder.com/uncle-bob/2017/03/03/TDD-Harms-Architecture.html',
      likes: 0,
      __v: 0
    },
    {
      _id: '5a422bc61b54a676234d17fc',
      title: 'Type wars',
      author: 'Robert C. Martin',
      url: 'http://blog.cleancoder.com/uncle-bob/2016/05/01/TypeWars.html',
      likes: 2,
      __v: 0
    }
  ]
  
  const nonExistingId = async () => {
    const blog = new Blog({
      title: 'non existing blog',
      author: 'doctor seuss',
      url: 'https://www.reddit.com/',
      likes: 1,
    })
  
    await blog.save()
    await blog.remove()
  
    return blog._id.toString()
  }
  
  const blogsInDb = async () => {
    const blogs = await Blog.find({})
    return blogs.map(blog => blog.toJSON())
  }
  
  const usersInDb = async () => {
    const users = await User.find({})
    return users.map(user => user.toJSON())
  }
  
  const createTestUser = async () => {
    await User.deleteOne({ username: 'test_user' })
    const saltRounds = 10
    const passwordHash = await bcrypt.hash(testUser.password, saltRounds)
  
    const user = new User({
      username: testUser.username,
      name: testUser.name,
      passwordHash,
    })
    await user.save()
    return user
  }
  
  module.exports = {
    testUser,
    initialBlogs,
    nonExistingId,
    blogsInDb,
    usersInDb,
    createTestUser,
  }
  
  